Hive:bigint和string进行join出现匹配错误问题

转载链接

在hive中,两个表进行join,on条件两表的字段含义一致(都是整数),但数据类型不一致:string和bigint。join后发现如果数值过大则匹配的记录会出现问题:一条记录会匹配出多条记录(explain可以发现都转换为double)

如:190000000002778025,就会错误的匹配上*8023 ,*8025

a)原因:Java中精度只有15至16位,当数据超过精度就会不准------也就会出现超过精度的记录join上许多不一致的记录。

bigint和string比较时会隐式地都转换成double,java中double的精度只有15-16位(double可以精确的表示小于2^52=4503599627370496的数字)。当数字超过精度的时候就会比较不准确,出现上面描述的现象。

b)解决方法:建议将string转换为bigint~ cast(c as bigint) 后再进行比较。

float 和 double 的区别:double更占内容,在满足需求的基础上,使用float更合理。

相关推荐
脸ル粉嘟嘟8 小时前
常用命令之Linux&Oracle&Hive&Python
linux·hive·oracle
脸ル粉嘟嘟9 小时前
大数据CDP集群中Impala&Hive常见使用语法
大数据·hive·hadoop
宝哥大数据10 小时前
数据仓库面试题集&离线&实时
大数据·数据仓库·spark
浊酒南街1 天前
hive中map_concat函数介绍
数据仓库·hive·hadoop
遥遥晚风点点1 天前
spark 设置hive.exec.max.dynamic.partition不生效
大数据·hive·spark
我的K84091 天前
Flink整合Hive、Mysql、Hbase、Kafka
hive·mysql·flink
Java资深爱好者2 天前
数据湖与数据仓库的区别
大数据·数据仓库·spark
三劫散仙2 天前
Hadoop + Hive + Apache Ranger 源码编译记录
hive·hadoop·hbase·ranger
dogplays2 天前
sqoop import将Oracle数据加载至hive,数据量变少,只能导入一个mapper的数据量
hive·oracle·sqoop
zmd-zk3 天前
hive中windows子句的使用
大数据·数据仓库·hive·hadoop·windows·分布式·big data