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

相关推荐
泰克教育官方账号2 小时前
泰涨知识 | 10分钟快速入门Hive之基本操作篇
数据仓库·hive·hadoop
howard20052 小时前
5.5 Hive导出数据实战
hive·导出数据
howard20052 小时前
5.3 Hive更新数据实战
hive·数据更新·事务表
Dragon online20 小时前
数据仓库深度探索系列:数仓建设全流程解析
数据仓库
isNotNullX21 小时前
数据中台有什么用?数据仓库和数据中台怎么选?
大数据·数据仓库·人工智能·数据中台
martian6651 天前
第九章:如何学习和掌握BI?
大数据·数据仓库·学习·etl·bi
BD_Marathon1 天前
Hive初始化元数据库时报错:Unknown version specified for initialization: 3.1.0
数据库·hive·hadoop
TTBIGDATA2 天前
【Ambari开启Kerberos】- Atlas启动 - Hive服务检查异常处理
大数据·hive·hadoop·硬件架构·ambari·kerberos·bigtop
阳爱铭3 天前
ClickHouse 中至关重要的两类复制表引擎——ReplicatedMergeTree和 ReplicatedReplacingMergeTree
大数据·hive·hadoop·sql·clickhouse·spark·hbase
isNotNullX4 天前
怎么理解ETL增量抽取?
数据库·数据仓库·etl·企业数字化