由於甲方人員使用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