当前位置: 首页 > article >正文

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

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

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  

http://www.kler.cn/a/443635.html

相关文章:

  • 「Python数据科学」标量、向量、矩阵、张量与多维数组的辨析
  • PetaLinux 内核输出信息的获取方式
  • 基于微信小程序的校园访客登记系统
  • springboot/ssm社区助老志愿者服务平台Java代码编写web志愿捐赠活动项目
  • 圣诞节文化交流会在洛杉矶成功举办
  • 【从零开始入门unity游戏开发之——unity篇02】unity6基础入门——软件下载安装、Unity Hub配置、安装unity编辑器、许可证管理
  • 电子应用设计方案-61:智能沙发系统方案设计
  • Unity常用面试问题
  • CSS的样式计算过程
  • 本地虚拟机 docker 中安装体验 qwen2.5 大模型
  • 新校区布网
  • mongodb应用心得
  • 【Harmony】@ohos.multimedia.audioHaptic (音振协同)填坑版~7
  • 【蓝桥杯】46195.水仙花数
  • SurfaceFlinger 学习
  • 使用DenyHosts阻止SSH暴力破解
  • Python 写的 《监控视频存储计算器》
  • HOOPS Communicator功能剖析:3D Web模型树交互的实用指南!
  • Hexo博客生成标签和分类页
  • 服务器ip:port服务用nginx 域名代理
  • 智能电网架构和模型:相关学点、工作模型、优势
  • Linux基础 -- 使用Linux Shell通过TCP发送消息
  • Spring框架中的@Async注解实现异步任务
  • websocket 局域网 webrtc 一对一 多对多 视频通话 的示例
  • Spring Boot中CollectionUtils怎么用
  • vscode 快速切换cangjie版本