私はこれを数日かけて少し調べてみました。ハイブテーブル内のデータのための私のアブロスキーマがある場合Prestoでbigintとして保存されたJavaタイムスタンプをタイムスタンプに変換する方法は?
:
{
"type" : "record",
"name" : "messages",
"namespace" : "com.company.messages",
"fields" : [ {
"name" : "timeStamp",
"type" : "long",
"logicalType" : "timestamp-millis"
}, {
…
と、私はこれを照会するプレストを使用し、私はフォーマットされたタイムスタンプを得ることはありません。
select "timestamp", typeof("timestamp") as type,
current_timestamp as "current_timestamp", typeof(current_timestamp) as current_type
from db.messages limit 1
timestamp type current_timestamp current_type 1497210701839 bigint 2017-06-14 09:32:43.098 Asia/Seoul timestamp with time zone
私はそれをミリ秒の精度でタイムスタンプに変換するために、非問題になるだろうと思ったが、私はそれを行うための明確な方法がありません見つけることです。
select cast("timestamp" as timestamp) from db.messages limit 1
line 1:16: Cannot cast bigint to timestamp
また、彼らはいつもソースが秒であると仮定するプレストのタイムスタンプ鋳造を変更しました。 https://issues.apache.org/jira/browse/HIVE-3454
は、だから、私はミリ秒を切り落とすために持っているか、そうでなければ、それは私に非常に遠い日付与えfrom_unixtime()
を使用した場合:
select from_unixtime("timestamp") as "timestamp" from db.messages limit 1
timestamp +49414-08-06 07:15:35.000
はきっと他の誰かがプレストと連携し、より変換を適切に表現する方法をよく知っています。 (PrestoサーバーとHiveサーバーを再起動してタイムゾーンをUTCに強制的に変更することはできません)。