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

相关推荐
Irene199142 分钟前
Windows 11 WSL Ubuntu 环境:实际安装 Hive 踩坑实录
hive·windows·ubuntu
Irene19912 小时前
(课堂笔记)Hive 分区、分桶与数据倾斜
hive·hadoop
Irene19911 天前
在 WSL Ubuntu 上安装和使用 Hive
linux·hive·ubuntu
Irene19911 天前
(课堂笔记)Hive 基础
hive·hadoop
云策数链2 天前
ERP报表系统设计与数据仓库
数据仓库·erp·用友·云策数链
水火既济__2 天前
加快hive效率
数据仓库·hive·hadoop
真上帝的左手3 天前
19. 大数据-数据仓库简介
大数据·数据仓库
lifewange4 天前
Hive 数据库 增删改 完整操作指南
数据库·hive·hadoop
WL_Aurora4 天前
Sqoop数据迁移工具从入门到精通
hive·hadoop·sqoop
zgdlsz5 天前
羲之文化传承人王杰宝:沉厚笔墨间的守正出新
大数据·数据库·数据仓库·涛思数据