关于hive当中的double的数据类型

最近发现通过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数据库当中的数据类型对应起来。这样在导入数据的时候才不会出现数据精度发生变化的情况。

posted on 2019-02-12 16:06  gxg123  阅读(14409)  评论(0编辑  收藏  举报

导航