2015-01-14 3 views
11

하이브에 저장된 타임 스탬프 기원 열 (BIGINT)이 있습니다. 이 신기원에 대해 'yyyy-MM-dd'날짜를 가져 오려고합니다. 내 시점은 밀리 초입니다. 예 : 1409535303522. 그래서 시간 스탬프를 선택하십시오. from_unixtime (timestamp, 'yyyy-MM-dd')은 시간 (초)을 예상하므로 날짜에 대한 잘못된 결과를 제공합니다.밀리 초 동안 from_unixtime 하이브

그래서 1000으로 나누려고했습니다.하지만 Double로 변환되면 함수를 적용 할 수 없습니다. 이 Double을 Bigint로 변환하려고 할 때 CAST조차 작동하지 않습니다.

+1

당신 '에 형식을 변경하는 경우 yyyy-MM-dd HH : mm : ss.SSS '? – LiMuBei

답변

22

은 다음 조회하여 그것을 해결 : BIGINT AS

select timestamp, from_unixtime(CAST(timestamp/1000 as BIGINT), 'yyyy-MM-dd') from Hadoop_V1_Main_text_archieved limit 10; 
+0

이 작동하지 않습니다. 오류가 발생합니다 - (double, string)을 사용하여 org.apache.hadoop.hive.ql.udf.UDFFromUnixTime 클래스와 일치하는 메서드가 없습니다. – Arnab

+2

예. 고정 버전으로 업데이트했습니다. – Cristian

1

timestamp_ms 밀리 초 unixtime

SELECT FROM_UNIXTIME있다 (층 (CAST (timestamp_ms)/1000) "YYYY-MM- dd HH : mm : ss.SSS ') created_timestamp FROM table_name;

2
당신이 문자열을 얻을 것이다 원래의 대답에

,하지만 당신은 당신이 날짜 추가 캐스트를 호출 할 필요가 날짜를 얻을하려는 경우 : 주조 날짜와 타임 스탬프에 대한

select 
    timestamp, 
    cast(from_unixtime(CAST(timestamp/1000 as BIGINT), 'yyyy-MM-dd') as date) as date_col 
from Hadoop_V1_Main_text_archieved 
limit 10; 

Docs . 지금까지 열로 변환 : 문자열의 형식은 'YYYY-MM-DD'에

cast(string as date)
경우 해당 년/월/일에 해당하는 날짜 값이 반환됩니다. 문자열 값이이 formate와 일치하지 않으면 NULL이 반환됩니다.

DATE :

날짜 유형은 언급 here 같은 하이브에서>0.12.0 수 있습니다 (참고 :에서만 사용할 수는 하이브 0.12.0로 시작하는)