案例:Spark/Hive中‘String=数值类型’丢失精度问题

问题描述 Spark/Hive执行sql,发现key不相等居然也关联上了:

sql 复制代码
select 
  a left join b   
      on   a.id = e.clue_id   --a.id类型:bigint,e.clue_id类型string
 where a.id=1734933297158217731

a.id e.clue_id dt timestamp


1734933297158217731 1734933297158217731 2023-12-14 2023-12-14 16:51:32

1734933297158217731 1734933297158217729 2023-12-14 2023-12-14 16:53:06

1734933297158217731 1734933297158217730 2023-12-14 2023-12-14 16:51:32

问题原因

使用HIve/Spark引擎执行sql时,当出现关联条件:String类型=数值类型(可能是double、int、bigint等),引擎会默认将两边的值cast成doble类型丢失精度,执行计划如下:

复制代码
Filter (id#27L = 1734933297158217731)
   +- Join LeftOuter, (if ((isnull(followup_kfid#12) || (followup_kfid#12 = ))) kf_id#33 else followup_kfid#12 = kf_id#136)
      :- Join LeftOuter, (cast(id#27L as double) = cast(clue_id#63 as double))
      :  :- SubqueryAlias `a`

验证一下:

解决办法 调整sql:

复制代码
 修改前: a left join b   on   a.id = a.id = e.clue_id                         where a.id=1734933297158217731
 修改后: a left join b   on   a.id = a.id = cast(e.clue_id as bigint)    where a.id=1734933297158217731  
相关推荐
cui178756825 分钟前
打破社区固有僵局,重塑物业、业主、商家新生态
大数据
无忧智库31 分钟前
碳电融合时代的数字化破局:某能源集团“十五五“VPP与碳交易联动运营系统深度解析(WORD)
大数据·人工智能·能源
菜鸟小码1 小时前
HDFS 数据块(Block)机制深度解析:从原理到实战
大数据·hadoop·hdfs
cd_949217211 小时前
2026年四大标签打印软件推荐|从轻量协同到工业级合规全场景适配
大数据
STLearner2 小时前
AI论文速读 | QuitoBench:支付宝高质量开源时间序列预测基准测试集
大数据·论文阅读·人工智能·深度学习·学习·机器学习·开源
跨境卫士苏苏2 小时前
清关链路更透明以后跨境卖家如何减少资料反复修改
大数据·人工智能·安全·跨境电商·亚马逊
openKylin3 小时前
从单点登录到全域安全,openKylin支撑国家电投数字身份认证创新实践
大数据·人工智能·安全
早睡早起早日毕业3 小时前
大数据管理与应用系列丛书《大数据平台架构》之第4章 Hadoop 分布式文件系统 (HDFS)
大数据·hadoop·架构
无心水3 小时前
【Hermes:核心机制】9、40+ 内置工具全解:执行/信息/媒体/记忆/协调五大类 —— 智能体手脚架完全手册
大数据·人工智能·openclaw·养龙虾·hermes·养马
sheji1053 小时前
扫地机器人行业深度分析报告
大数据·人工智能·机器人·智能硬件