2016-09-30 17 views
4

REC_TIME列の文字列をハイブのタイムスタンプ形式に変換しようとしています。Apache Hive:文字列をタイムスタンプに変換するには?

例:日7月31日9時28分20秒UTC 2016 => 2016年7月31日9時28分20秒

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

私は上記のSQLを実行すると、それはNULL値を返します。 。

答えて

3

はこれを試してみてください:

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

あなたのハイブクラスターは、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 ハイブ日付関数は、パターンにJAVA単純日付フォーマッタを使用します。パターンについてはthisを参照してください。

+0

Nidhinありがとうございました。私はタイムスタンプでより多くの操作を行う必要がある場合は、これのためのドキュメントのリンクを共有することはできますか?役立つだろう – Naveen

+0

参照URLを追加しました。答えがあれば答えを受け入れることができたかどうかを知って、質問に答えました。 –

+0

私のサーバーがESTにあり、それをGMTに変換するとどうなりますか?どうやってするか? –

1

私のコンピュータに注意してくださいだからUTC時間が午前2時28分20秒PDTに変換され

[[email protected] ~]$ date +%Z 
PDT 

PDT

上で実行されます。とにかくこれはポイントではありません。 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 | 
+----------------------+--+ 
関連する問題