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 小时前
Hive 函数学习笔记(下):窗口函数与经典案例
hive·笔记·学习
爱吃火鸡面呀2 小时前
DataX 实战:使用 HDFS Reader 读取 Hive ORC 表并输出到 Stream
hive·hadoop·hdfs
yumgpkpm3 小时前
CDP 7.3.1(Cloudera Runtime 7.3.1)VS Acceldata ODP 3.3.6.4 核心引擎详细版本对比
大数据·hive·hadoop·postgresql·zookeeper·spark·hbase
yumgpkpm1 天前
Acceldata ODP(Open Data Platform)3.3.6.4(RHEL9)保姆级完整安装手册
大数据·人工智能·hive·hadoop·kafka·hbase·cloudera
陈年老古董1 天前
Hive 函数学习笔记(上):单行函数与炸裂函数
hive·笔记·学习
真上帝的左手2 天前
27. 数据产品-数据中台架构规划
数据仓库·架构·数据分析·数据中台
陈年老古董2 天前
Hive 分区表学习笔记:语法、操作、二级分区与动态分区
hive·笔记·学习
省钱兄--zs2 天前
24小时自助健身房系统软件开发实战:从架构设计到部署全指南
java·数据仓库·spring boot·系统架构·需求分析
53488736abcdefg2 天前
Hive 入门&架构原理
hive·hadoop·架构
磁场转动100万匹2 天前
Hive 学习第一天:搞懂它是什么,并搭好可用的环境
hive·hadoop·学习