您好,登錄后才能下訂單哦!
溫馨提示:要看高清無碼套圖,請使用手機打開并單擊圖片放大查看。
1.問題描述
Hive表中存儲的Timestamp類型的字段顯示日期與Impala中查詢出來的日期不一致。
2.問題復現
1.創建一個簡單的測試表
2.向表中插入一條測試數據
insert into date_test4 values(1,'1503751615','2017-08-26 08:46:55');
獲取當前系統時間存入表中:
3.通過Hive查詢時間顯示如下
select id,create_date_str,from_unixtime(create_date) from date_test4;
4.通過Impala查詢時間顯示如下
select id,create_date_str,cast(create_date as timestamp) from date_test4;
可以看到通過Hive查詢看到的時間與通過Impala查詢看到的時間不一致;
3.問題分析
3.1Hive的from_unixtime
Hive官網from_unixtime函數說明:
Return Type | Name(Signature) | Description |
---|---|---|
string | from_unixtime(bigint unixtime, string format) | Converts the number of seconds from unix epoch (1970-01-01 00:00:00 UTC) to a string representing the timestamp of that moment in the current system time zone in the format of "1970-01-01 00:00:00". |
在Hive中通過from_unixtime函數將TIMESTAMP時間戳轉換成當前時區的日期格式的字符串,默認格式為“yyyy-MM-dd HH:mm:ss”,所以Hive在查詢的時候能正確的將存入的時間戳轉成當前時區的時間;
3.2Impala的TIMESTAMP
默認情況下,Impala不會使用本地時區存儲時間戳,以避免意外的時區問題造成不必要的問題,時間戳均是使用UTC進行存儲和解釋。具體說明請參考官方文檔:
http://impala.apache.org/docs/build/html/topics/impala\_timestamp.html#timestamp
4.解決方法
使用Impala的from_utc_timestamp函數指定時區進行時間轉換,事例如下:
select id,create_date_str, cast(create_date as timestamp),from_utc_timestamp(cast(create_date as timestamp), 'EDT') from date_test4;
指定時區后時間與原始Hive中顯示時間一致,時區查看參考如下地址:
http://zh.thetimenow.com/time-zones-abbreviations.php
醉酒鞭名馬,少年多浮夸! 嶺南浣溪沙,嘔吐酒肆下!摯友不肯放,數據玩的花!
溫馨提示:要看高清無碼套圖,請使用手機打開并單擊圖片放大查看。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。