2017-06-20 56 views
0

HIVE UDFshttps://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF#LanguageManualUDF-DateFunctions) からSparklyrまで適切にタイムスタンプを読み込もうとしています。任意のアイデア..ハイブ:ミリ秒のタイムスタンプを変換する方法は?

unix_timestamp('2011-03-01T00:00:04.226Z', 'yyyy-MM-ddThh:mm:ss.SSS') 

戻りNA S:

残念ながら、私は正しく、次のタイムスタンプを解析することができていませんか?ここで正しいパターンは何ですか? THanks!

答えて

2

あなたがTZ

hive> select unix_timestamp('2011-03-01T00:00:04.226Z', "yyyy-MM-dd'T'hh:mm:ss.SSS'Z'"); 
OK 
1298959204 

を引用それとも、不器用なことは恐れていない場合は、これを試してみる必要があります。

select unix_timestamp(cast(regexp_replace('2011-03-01T00:00:04.226Z', '(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2}):(\\d{2}).(\\d{3})Z', '$1-$2-$3 $4:$5:$6.$7') as timestamp)) 

次を使用し、ESTからUTCに変換するには:

hive> select to_utc_timestamp(unix_timestamp('2011-03-01T00:00:04.226Z', "yyyy-MM-dd'T'hh:mm:ss.SSS'Z'")*1000, 'EST'); 
OK 
2011-03-01 05:00:04 

倍数オンであるため、:

から、1000が必要です。分数値は秒と見なされます。 (2592000.0、 'PST')、to_utc_timestamp(2592000000、 'PST')、to_utc_timestamp(timestamp '1970-01-30 16:00:00'、 'PST')などの整数値はすべてミリ秒とみなされます。タイムスタンプ1970-01-31 00:00:00

+0

thats really great !!! –

+0

は、bigint型を返します。 mytimeが作成したばかりの 'unix_timestamp'はどこに' to_utc_timestamp(mytime、 'EST') 'を使用できないのか知っていますか?それをどのようにタイムスタンプ型に変換しますか? –

+0

元のタイムスタンプが 'EST'で、' GMT'でそれを望む場合 –

関連する問題