Hiveにはタイムスタンプエポック列(BIGINT)が保存されています。このエポックの日付「yyyy-MM-dd」を取得します。問題は、私のエポックがミリ秒単位であることです。 1409535303522。したがって、タイムスタンプfrom_unixtime(timestamp、 'yyyy-MM-dd')を選択すると、エポックが秒単位で予想されるため、日付に対して誤った結果が返されます。
だから私はそれを1000で割ってみました。しかし、それからDoubleに変換され、関数を適用できません。このdoubleをBigintに変換しようとすると、CASTでも機能しません。
次のクエリで解決しました:
select timestamp, from_unixtime(CAST(timestamp/1000 as BIGINT), 'yyyy-MM-dd') from Hadoop_V1_Main_text_archieved limit 10;
元の答えでは文字列を取得しますが、日付を取得したい場合は、日付付きの追加キャストを呼び出す必要があります:
_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 日付とタイムスタンプをキャストします。文字列を日付に変換する場合:
cast(string as date)
文字列の形式が「YYYY-MM-DD」の場合、その年/月/日に対応する日付値が返されます。文字列値がこの形式と一致しない場合、NULLが返されます。
日付タイプは、前述のようにHive> _0.12.0
_からのみ使用可能です here :
DATE
(注:Hive 0.12.0以降でのみ使用可能)
timestamp_msはミリ秒単位のunixtimeです
SELECT from_unixtime(floor(CAST(timestamp_ms AS BIGINT)/ 1000)、 'yyyy-MM-dd HH:mm:ss.SSS')as created_timestamp FROM table_name;