복붙노트

[HADOOP] 하이브의 문자열을 타임 스탬프로 변환

HADOOP

하이브의 문자열을 타임 스탬프로 변환

내 하이브 테이블에 다음 타임 스탬프 문자열 표현이 있습니다.

20130502081559999

나는 그것을 다음과 같이 문자열로 변환해야한다.

2013-05-02 08:15:59

다음 ({code} >>> {result}) 시도했습니다.

from_unixtime(unix_timestamp('20130502081559999', 'yyyyMMddHHmmss')) >>> 2013-05-03 00:54:59
from_unixtime(unix_timestamp('20130502081559999', 'yyyyMMddHHmmssMS')) >>> 2013-09-02 08:15:59
from_unixtime(unix_timestamp('20130502081559999', 'yyyyMMddHHmmssMS')) >>> 2013-05-02 08:10:39

타임 스탬프로 전환 한 다음 유닉스 시간이 이상하게 보입니다. 어떻게해야할까요?

편집하다 나는 그것을 알아.

from_unixtime(unix_timestamp(substr('20130502081559999',1,14), 'yyyyMMddHHmmss')) >>> 2013-05-02 08:15:59

또는

from_unixtime(unix_timestamp('20130502081559999', 'yyyyMMddHHmmssSSS')) >>> 2013-05-02 08:15:59

아직도 ... 더 좋은 방법이 있습니까?

해결법

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

    1."더 나은 방법"으로 무엇을 의미하는지 확신 할 수 없지만 항상 날짜 변환을 처리하는 자체 함수를 작성할 수 있습니다.

    "더 나은 방법"으로 무엇을 의미하는지 확신 할 수 없지만 항상 날짜 변환을 처리하는 자체 함수를 작성할 수 있습니다.

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

    2.형식에 밀리 초 세 자리가있는 것 같습니다. SimpleDateFormat에 따르면 다음과 같이 사용해야합니다.

    형식에 밀리 초 세 자리가있는 것 같습니다. SimpleDateFormat에 따르면 다음과 같이 사용해야합니다.

    from_unixtime(unix_timestamp('20130502081559999', 'yyyyMMddHHmmssSSS'))
    

    희망이 도움이됩니다.

  3. ==============================

    3.다음과 같은 입력 파일이 있다고 가정 해 보겠습니다.

    다음과 같은 입력 파일이 있다고 가정 해 보겠습니다.

    file : ///data/csv/temptable/temp.csv

    1   2015-01-01  
    2   2015-10-10 12:00:00.232
    3   2016-02-02
    4   2015-09-12 23:08:07.124
    

    그런 다음이 방법을 시도해 볼 수도 있습니다.

    create external table temptable(id string, datetime string) row format delimited fields terminated by '\t' stored as textfile LOCATION 'file:///data/csv/temptable';
    
    create table mytime as select id, from_utc_timestamp(date_format(datetime,'yyyy-MM-dd HH:mm:ss.SSS'),'UTC') as datetime from temptable;
    
  4. from https://stackoverflow.com/questions/17796071/convert-string-to-timestamp-in-hive by cc-by-sa and MIT license