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更合理。

相关推荐
谅望者1 小时前
数据分析笔记01:数据分析概述
大数据·数据库·数据仓库·数据分析
q***766616 小时前
Spring Boot 从 2.7.x 升级到 3.3注意事项
数据库·hive·spring boot
q***3751 天前
Spring Boot 从 2.7.x 升级到 3.3注意事项
数据库·hive·spring boot
Hello.Reader1 天前
Flink CDC + StarRocks用 StarRocks Connector 打通实时明细与分析
数据仓库·adb·flink
yumgpkpm3 天前
CMP(类Cloudera CDP 7.3 404版华为Kunpeng)与其他大数据平台对比
大数据·hive·hadoop·elasticsearch·kafka·hbase·cloudera
piepis3 天前
Doris Docker 完整部署指南
数据仓库·docker·doris·容器部署
yumgpkpm4 天前
Hadoop大数据平台在中国AI时代的后续发展趋势研究CMP(类Cloudera CDP 7.3 404版华为鲲鹏Kunpeng)
大数据·hive·hadoop·python·zookeeper·oracle·cloudera
KANGBboy5 天前
ES 总结
hive·elasticsearch
FeelTouch Labs5 天前
数据仓库和数据集市之ODS、CDM、ADS、DWD、DWS
数据仓库