最近發現通過sqoop將oracle數據庫當中的數據到如到hive當中,發現oracle數據庫當中number類型的數據變成了hive當中的double類型。不只是變成了double類型,數據好像稍微有點變化。
比如原來的:3769.14 變成了 3769.1399999999999 ,還有就是1737.66 變成了1737.6600000000001 貌似有點數據變小了,有的數據變大了
這個是什么原因那,
產生如上結果原因為:
a) 對於所有使用IEEE標准進行浮點編碼系統中,都普遍存在如下問題,並不僅僅是hive,Java,還有很多
b)hive當中double是8個字節。比如0.2對飲的真實結果是0.200000000001
c) 順便說一下 hive當中的float類型是占4個字節,比如0.2對應的是0.2000001
所以在進行數據類型比較的時候,特別是hive當中,如果大於某個數,其實這個時候指的就是double的數據類型。
綜上所以在將數據導入到hive之后的精度發生了變化。所以我們要將hive當中的數據類型和oracle數據庫當中的數據類型對應起來。這樣在導入數據的時候才不會出現數據精度發生變化的情況。
