2015-01-14 22 views
11

タイムスタンプエポック列(BIGINT)がHiveに格納されています。 このエポックには「yyyy-MM-dd」という日付を取得します。 問題は、エポックがミリ秒単位で表示されます。 1409535303522. したがって、タイムスタンプを選択すると、from_unixtime(タイムスタンプ、 '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

これは動作しません。エラーが発生します - クラスorg.apache.hadoop.hive.ql.udf.UDFFromUnixTimeに一致するメソッドが(double、string)ではありません。 – 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が戻されます。 here述べたように

Date型はハイブ>0.12.0から提供されています:

DATE(注:ハイブ0.12.0で始まるのみ利用可能)