web-dev-qa-db-ja.com

HIVEで日付文字列をUTCから特定のタイムゾーンに変換する方法は?

私のHiveテーブルには、UTC日付文字列を含む日付列があります。特定のEST日付のすべての行を取得したい。

私は以下のようなことをしようとしています:

Select * 
from TableName T
where TO_DATE(ConvertToESTTimeZone(T.date))  = "2014-01-12" 

ConvertToESTTimeZoneの関数があるかどうか、またはそれを実現する方法を知りたいですか?

次のことを試しましたが、機能しません(デフォルトのタイムゾーンはCSTです)。

TO_DATE(from_utc_timestamp(T.Date) = "2014-01-12" 
TO_DATE( from_utc_timestamp(to_utc_timestamp (unix_timestamp (T.date), 'CST'),'EST'))

前もって感謝します。

更新:

Strange behavior. When I do this:

select "2014-01-12T15:53:00.000Z", TO_DATE(FROM_UTC_TIMESTAMP(UNIX_TIMESTAMP("2014-01-12T15:53:00.000Z", "yyyy-MM-dd'T'hh:mm:ss.SSS'Z'"), 'EST')) 
from TABLE_NAME T1
limit 3

私は得る

    _c0                          _c1
0   2014-01-12T15:53:00.000Z    1970-01-16
1   2014-01-12T15:53:00.000Z    1970-01-16
2   2014-01-12T15:53:00.000Z    1970-01-16
7
Gadam

HiveでUTCをESTに変換する場合、システムのタイムゾーンCSTは重要ではありません。次の方法で正しい結果を得ることができるはずです。

TO_DATE(FROM_UTC_TIMESTAMP(UNIX_TIMESTAMP(T.date, "yyyy-MM-dd'T'hh:mm:ss.SSS'Z'") * 1000, 'EST'))

UNIX_TIMESTAMPは秒を返し、タイムスタンプのミリ秒コンポーネントは失われます。

16
Jeremy Beard

これは、夏時間シフトでCSTに変換されます。

to_date(FROM_UTC_TIMESTAMP(UNIX_TIMESTAMP(eff_timestamp, "yyyy-MM-dd'T'hh:mm:ss.SSS'Z'") * 1000, 'CST6CDT')) 
1
Carl