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

相关推荐
Leo.yuan13 小时前
ETL是什么?一文讲清ETL和ELT的区别
数据仓库·etl
zhojiew2 天前
[INFRA] EMR集群中Hive和Spark集成Glue Data Catalog过程的深入分析
hive·hadoop·spark·aws·bigdata
bukeyiwanshui2 天前
Hive的使用
数据仓库·hive·hadoop
SelectDB技术团队2 天前
从两套系统到一条 SQL:SelectDB search() 搞定日志的搜索与分析
数据库·数据仓库·sql·开源
添柴少年yyds3 天前
hive锁机制
数据仓库·hive·hadoop
蓝眸少年CY3 天前
Hive - 安装与使用
数据仓库·hive·hadoop
旺仔小拳头..4 天前
Servlet概念与创建
数据仓库·hive·hadoop
旺仔小拳头..4 天前
Filter 过滤器 与Listener 监听器
数据仓库·hive·hadoop
Leo.yuan4 天前
实时ETL怎么做?有哪些好用的ETL工具?
数据仓库·etl
晨晖24 天前
Servlet的快速入门,请求和响应
hive·hadoop·servlet