時間戳負數轉換問題

由於甲方人員使用sqoop抽數據,把時間類型自動轉換成了時間戳,而且是毫秒級別的。。

於是我們嘗試使用hive的時間戳方法轉換成日期

select from_unixtime(cast(-2114409600000/1000 as int),'yyyy-MM-dd HH:mm:ss')
--1903-01-01 00:00:00

select from_unixtime(cast(-2209017600000/1000 as int),'yyyy-MM-dd HH:mm:ss')
--1901-12-14 04:45:52

如上所見,1903-01-01 00:00:00轉換是沒問題的,但是
1900-01-01 00:00:00轉換時,出現問題!!!
本身這個時間用不到也沒關係,由於我們是分區表(按照年月分區)
直接導致原來的190001分區無法被覆蓋!!!
而且日期不對,存在很大安全隱患,急需解決。。。
最終發現,當時間戳超過int最大值(21億左右)是時候就會存在問題,因此需要使用bigint纔行

select from_unixtime(cast(-2209017600000/1000 as bigint),'yyyy-MM-dd HH:mm:ss')
--1900-01-01 00:00:00
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章