복붙노트

[HADOOP] 하둡 - 테이블을 만들 때 서식 날짜

HADOOP

하둡 - 테이블을 만들 때 서식 날짜

어떻게 하이브 테이블을 생성하는 과정에서 날짜를 포맷하는 방법?

저는 현재 직장에서 발견 환경에 일부 데이터를 덤프하고 나는 DATE로를 포맷 또는 시간 소인 경우 값이 null이기 때문에, 문자열로 날짜를 저장했습니다.

다음은 원시 데이터의 모습입니다 :

12/07/2016 05:07:28 PM

나의 이해는 하이브는이 형식으로 날짜를 사용하기 때문이다

yyyy-mm-dd hh:mm:ss

나는 SELECT 문을 사용하여 이러한 형식을 지정할 수 있습니다 :

select id, receipt_dt, from_unixtime(unix_timestamp(receipt_dt ,'MM/dd/yyyy'), 'yyyy-MM-dd') as app_dt from MySchema.MyTable where app_num='123456'

어떻게 문에 추가 할 수 있습니다

from_unixtime(unix_timestamp(receipt_dt ,'MM/dd/yyyy'), 'yyyy-MM-dd')

나는 더 이상 문자열로 날짜를 저장하거나 서식을 변경하려면 ALTER TABLE 문을 사용할 필요가 없습니다 아래에 있도록하는 방법이 일반적인 CREATE EXTERNAL 문에 추가 할 수 있습니까?

CREATE EXTERNAL TABLE IF NOT EXISTS MySchema.My_New_Table 
( Field1 Format, 
Field2 Format, 
Field 3 Format, 
) 
.......

해결법

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

    1.원시 데이터를 준비 테이블로을 MyTable를 사용하여 즉 변환, 날짜 형식으로 최종 / 목표 테이블 my_new_table을 만들 ... 그것은 프로세스의 EDW 종류가 될 것입니다 ...

    원시 데이터를 준비 테이블로을 MyTable를 사용하여 즉 변환, 날짜 형식으로 최종 / 목표 테이블 my_new_table을 만들 ... 그것은 프로세스의 EDW 종류가 될 것입니다 ...

    예:

    CREATE EXTERNAL TABLE IF NOT EXISTS MySchema.My_New_Table 
    ( Field1 int, 
    Field2 string, 
    Field3 date
    ) 
    ... more definitions....
    AS
    select id, receipt_dt, 
    cast(from_unixtime(unix_timestamp(receipt_dt ,'MM/dd/yyyy'), 'yyyy-MM-dd') as date) as app_dt 
    from MySchema.MyTable ;
    

    참고 :이 문을 테스트하지 않습니다. 당신이 시도하고 편집 시도해야 할 수도 있습니다 ...하지만 당신은 아이디어를 가지고 ...

    이어서 삽입 델타 유사한 프로세스되어야 ...

    INSERT INTO TABLE MySchema.My_New_Table
    AS
    select id, receipt_dt, 
    cast(from_unixtime(unix_timestamp(receipt_dt ,'MM/dd/yyyy'), 'yyyy-MM-dd') as date) as app_dt 
    from MySchema.MyTable  where <<conditions>>;
    
  2. from https://stackoverflow.com/questions/41400094/hadoop-formatting-dates-when-creating-tables by cc-by-sa and MIT license