복붙노트

[HADOOP] 아파치 하이브 : 문자열을 타임 스탬프로 변환하는 방법?

HADOOP

아파치 하이브 : 문자열을 타임 스탬프로 변환하는 방법?

나는 하이브의 타임 스탬프 형식으로 REC_TIME 열의 문자열을 변환하려고합니다.

예 : 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 값이 반환됩니다.

해결법

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

    1.이 시도 :

    이 시도 :

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

    하이브 클러스터에 UTC 표준 시간대가있는 경우에는 정상적으로 작동합니다. 서버가 중부 표준시에 있다고 가정하면 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');
    

    희망이 도움이됩니다.

    편집하다 하이브 데이트 함수는 패턴에 JAVA 간단한 날짜 포맷터를 사용합니다. 이 패턴을 참조하십시오.

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

    2.내 컴퓨터가 PDT에서 작동하는지 확인하십시오.

    내 컴퓨터가 PDT에서 작동하는지 확인하십시오.

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

    따라서 UTC 시간은 2:28:20 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  |
    +----------------------+--+
    
  3. from https://stackoverflow.com/questions/39782293/apache-hive-how-to-convert-string-to-timestamp by cc-by-sa and MIT license