unix_timestampおよびfrom_unixtime Hive関数は互いに「逆」です。
Hiveでタイムスタンプ文字列を秒に変換しようとすると:
SELECT unix_timestamp('10-Jun-15 10.00.00.000000 AM', 'dd-MMM-yy hh.mm.ss.MS a');
1418176800になります。
1418176800をタイムスタンプ文字列に変換しようとすると:
SELECT from_unixtime(1418176800, 'dd-MMM-yy hh.mm.ss.MS a');
私は10-Dec-14 10.00.00.120 AMを受け取ります。これは明らかにオリジナルとは異なります。
誰かが何が起こっているのか説明できますか?ありがとう。
言語マニュアルから:
指定されたパターンの時間文字列をUnixタイムスタンプに変換します(秒単位)この関数の結果は秒単位です。
結果は日付のミリ秒部分で変化しますが、UNIX関数は秒のみをサポートします。例えば:
SELECT unix_timestamp('10-Jun-15 10.00.00 AM', 'dd-MMM-yy hh.mm.ss a');
1433930400
SELECT from_unixtime(1433930400, 'dd-MMM-yy hh.mm.ss a');
2015年6月10日10.00.00 AM
2番目のクエリのように、unix_timestampからは使用しないでください。さらに、ステートメントには、12の代わりにDECが使用される結果を与えるフォーマットが含まれています。dd-MMM-yyを参照してください。形式を指定しないでください。それで問題なく動作します。以下の例を参照してください。
ただし、from_unixtime()とunix_timestamp()を使用して時間文字列との間で相互に変換することは正しいです。
select unix_timesetamp('2015-04-09 03:04:26') from dual;
「1428566666」の結果
select from_unixtime(1428566666) from dual;
「2015-04-09 03:04:26」の結果