function - repartition - hive select from show partitions




어떻게 하이브에 유닉스 시대의 시간 문자열을 변환하는 (4)

날짜를 사용자 정의 형식으로 변환해야하는 경우 다음을 사용하십시오.

select date_format(from_unixtime(epoch_datetime),'yyyMM') as formatted_date from myHiveTable;


yearMonth (예 : 201708)로 날짜를 반환합니다.

timestamp 열을 포함하는 로그 파일이 있습니다. 타임 스탬프는 유닉스 에포크 시간 형식입니다.

년, 월, 일 파티션으로 타임 스탬프를 기반으로 파티션을 만들고 싶습니다.

지금까지이 작업을 수행했지만 오류가 발생했습니다.

PARSE ERROR cannot recognize input '(' in column type

여기에 내 코드가있다.

from (
      from raw_data
            MAP  ${PREFIX}raw_data.line
            USING 's3://scripts/clean.py'
            AS (timestamp STRING, name STRING)
      ) map_out
INSERT OVERWRITE TABLE date_base_data_temp PARTITION(year(timestamp), month(timestamp)), day(timestamp))) 
    select map_out.name;

오프,보기 흉하게 보입니다. 하이브에서이 기능을 사용해보십시오.

SELECT from_unixtime(unix_timestamp) as new_timestamp from raw_data ...

또는 ms 소인이 ms 대신 ms 경우 :

SELECT from_unixtime(unix_timestamp DIV 1000) as new_timestamp from raw_data ...

유닉스 타임 스탬프를 YYYY-MM-DD HH : MM : SS 형식으로 변환하면 다음 함수를 사용하여 년, 월, 일을 얻을 수 있습니다.

SELECT year(new_timestamp) as year, month(new_timestamp) as month, day(new_timestamp) as day ...

타임 스탬프를 문자열 문자열 파티션의 날짜 문자열 yyyy-MM-dd로 변환해야하는 목록에이 쿼리를 추가합니다.

hive> select date_format(from_unixtime(epoch_datetime), 'yyyy-MM-dd') as day from table_name limit 20;

-- If required, remove the millis precision for timestamps
hive> select date_format(from_unixtime(cast(epoch_datetime/1000 as bigint)), 'yyyy-MM-dd') as day from table_name limit 20;

select order_id, date_format(from_unixtime(order_date/1000),'yyy-MM-dd') as order_date ,order_customer_id,order_status
from orders

또는 동일한 오류가 표시되면 select order_id, date_format (from_unixtime (order_date DIV 1000), 'yyy-MM-dd')를 order_date, order_customer_id, orders_status from orders