You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Databricks SQL查询结果反复不一致,求技术排查方案

Databricks SQL查询结果不一致的排查思路

以下SQL在Databricks中每次执行返回的count结果都不同,不符合预期:

select count (*) 
from   (select policy_number, 
               writing_agent_number, 
               agency, 
               agent_part, 
               int(total_parts) total_parts 
        from   (select a.policy_number, 
                       a.writing_agent_number, 
                       a.agency, 
                       sum(a.agent_part) 
                         over ( 
                           partition by a.policy_number) total_parts, 
                       a.agent_part 
                from   ml_raw.agent_splits_dec_12 a) b 
        where  int(total_parts) = 1 
        order  by b.policy_number)   

排查思路:

  • 核查源表数据稳定性:多次执行select count(*) from ml_raw.agent_splits_dec_12,确认源表是否有增量写入、更新或删除操作,导致每次查询的基础数据不一致。也可查看表的修改记录、上游任务日志,确认是否有数据变更行为。
  • 排查浮点计算精度问题:sum(a.agent_part)的结果为浮点型,直接转int时可能因浮点精度误差(如实际为0.9999999999或1.0000000001)导致转换结果不稳定。可修改判断逻辑,比如用round(total_parts) = 1,或先将total_parts转为decimal类型(如cast(total_parts as decimal(18,6)) = 1),或者用范围判断total_parts between 0.999999 and 1.000001规避浮点误差。
  • 检查分布式执行的随机性:Spark分布式执行时,shuffle过程的随机性可能导致窗口函数的sum计算出现细微差异。可尝试在源表查询后添加repartition(固定分区数)强制固定分区,或查看两次查询的执行计划(用EXPLAIN),确认是否有执行路径差异。
  • 验证表存储格式的一致性:若源表非Delta Lake格式,可能存在未提交的写入文件或文件损坏问题;若是Delta表,可执行DESCRIBE HISTORY ml_raw.agent_splits_dec_12查看表版本变化,确认是否有版本切换导致数据变更。

内容的提问来源于stack exchange,提问作者shafee ul kabir Fahim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 09:43:25