복붙노트

[HADOOP] HIVE에서 날짜 문자열을 UTC에서 특정 시간대로 변환하는 방법은 무엇입니까?

HADOOP

HIVE에서 날짜 문자열을 UTC에서 특정 시간대로 변환하는 방법은 무엇입니까?

My Hive 테이블에는 UTC 날짜 문자열이있는 날짜 열이 있습니다. 특정 EST 날짜에 대한 모든 행을 가져오고 싶습니다.

나는 아래와 같은 것을하려고 노력하고있다 :

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

ConvertToESTTimeZone에 대한 함수가 있는지 또는이를 달성 할 수있는 방법을 알고 싶습니다.

나는 다음과 같은 노력했지만 그것은 작동하지 않는다 (내 기본 시간대는 중부 표준시) :

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

해결법

  1. ==============================

    1.시스템 시간대 CST는 하이브의 UTC를 EST로 변환하는 데 중요하지 않습니다. 다음을 사용하여 올바른 결과를 얻을 수 있어야합니다.

    시스템 시간대 CST는 하이브의 UTC를 EST로 변환하는 데 중요하지 않습니다. 다음을 사용하여 올바른 결과를 얻을 수 있어야합니다.

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

    UNIX_TIMESTAMP는 초를 반환하므로 타임 스탬프의 밀리 초 구성 요소가 손실됩니다.

  2. ==============================

    2.이렇게하면 일광 절약 시간제로 CST로 변환됩니다.

    이렇게하면 일광 절약 시간제로 CST로 변환됩니다.

    to_date(FROM_UTC_TIMESTAMP(UNIX_TIMESTAMP(eff_timestamp, "yyyy-MM-dd'T'hh:mm:ss.SSS'Z'") * 1000, 'CST6CDT')) 
    
  3. from https://stackoverflow.com/questions/28508640/how-to-convert-a-date-string-from-utc-to-specific-timezone-in-hive by cc-by-sa and MIT license