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

相关推荐
howard200528 分钟前
Hive实战任务 - 9.1 实现词频统计
hive·词频统计
colorknight30 分钟前
数据编织-异构数据存储的自动化治理
数据仓库·人工智能·数据治理·数据湖·数据科学·数据编织·自动化治理
满目山河•6 小时前
二、复制三台虚拟机
hive·hadoop·hbase
howard200511 小时前
Hive实战任务 - 9.3 实现学生信息排序和统计
hive·排序·汇总·学生信息
番茄撒旦在上12 小时前
什么样的表适合做拉链表
大数据·数据仓库·hive
YMatrix 官方技术社区12 小时前
YMatrix 高可用详解:3 种镜像策略在节点宕机时表现有何不同?
运维·数据库·数据仓库·ai·数据库开发·数据库架构·ymatrix
howard200512 小时前
Hive实战任务 - 9.5 实现网址去重
hive·网址去重
howard200512 小时前
Hive实战任务 - 9.4 分科汇总求月考平均分
hive·分科汇总月考平均分
howard200513 小时前
Hive实战任务 - 9.2 统计总分与平均分
hive·统计总分与平均分