web-dev-qa-db-ja.com

Hiveのunix_timestampおよびfrom_unixtime関数

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を受け取ります。これは明らかにオリジナルとは異なります。

誰かが何が起こっているのか説明できますか?ありがとう。

8
oikonomiyaki

言語マニュアルから:

指定されたパターンの時間文字列を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

10
Tom

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」の結果

2
invoketheshell