web-dev-qa-db-ja.com

Apache Hive:文字列をタイムスタンプに変換する方法は?

REC_TIME列の文字列をHiveのタイムスタンプ形式に変換しようとしています。

例:Sun Jul 31 09:28:20 UTC 2016 => 2016-07-31 09:28:20

SELECT xxx, UNIX_TIMESTAMP(REC_TIME, "E M dd HH:mm:ss z yyyy") FROM wlogs LIMIT 10;

上記のSQLを実行すると、NULL値が返されます。

5
Naveen

これを試して :

select from_unixtime(unix_timestamp("Sun Jul 31 09:28:20 UTC 2016","EEE MMM dd HH:mm:ss zzz yyyy"));

HiveクラスターにUTCタイムゾーンがある場合、これは正常に機能します。サーバーがCSTにあるとすると、UTCに到達するには以下のようにする必要があります。

select to_utc_timestamp(from_unixtime(unix_timestamp("Sun Jul 31 09:28:20 UTC 2016","EEE MMM dd HH:mm:ss zzz yyyy")),'CST');

お役に立てれば。

[〜#〜] edit [〜#〜]Hive日付関数は、パターンにJava単純な日付フォーマッターを使用します。パターンについては this を参照してください。

5
K S Nidhin

私のコンピューターはPDTで実行されていることに注意してください

[cloudera@quickstart ~]$ date +%Z
PDT

したがって、UTC時間は2:28:20PDTに変換されます。とにかく、これは重要ではありません。 HHを何時間も使用していて、hhを使用していて、その月に少なくとも3Mが必要です。

0: jdbc:Hive2://quickstart:10000/default> select from_unixtime(unix_timestamp("Sun Jul 31 09:28:20 UTC 2016", 'E MMM dd hh:mm:ss z yyyy')) as date;
+----------------------+--+
|         date         |
+----------------------+--+
| 2016-07-31 02:28:20  |
+----------------------+--+
1
ozw1z5rd