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

Azure Databricks SQL三表Join查询卡在9300万行无进展求助

Azure Databricks SQL三表Join查询卡在9300万行无进展的排查方案

问题详情

在Azure Databricks SQL中执行三表Join查询时,执行进度停留在9300万行,无后续进展。执行的SQL代码如下:

Select 
    r.med, m.mbs, 
    r.sname, 
    r.apl, 
    m.han, 
    p.pt 
from 
    ‘hive_metastore.pdw’ p
join 
    ‘hive_metastore.rdm’ r    on p.pt = r.med 
join 
    ‘hive.metastore.mdw’ m  on r.med = m.han 
Order 
    By m.han 
desc 

执行状态截图:
执行状态截图

排查与解决建议

  • 修正SQL语法错误:代码中表名使用了中文单引号‘’,需替换为英文反引号`;另外hive.metastore.mdw存在拼写错误,应该是hive_metastore.mdw(下划线替代点),语法错误可能导致执行异常。
  • 移除排序先验证:ORDER BY m.han DESC会触发全局Shuffle排序,在9300万级数据量下会极大消耗资源,先去掉排序语句,确认查询是否能正常完成,判断是排序环节还是Join环节导致的停滞。
  • 更新表统计信息:Databricks的查询优化器依赖表的统计信息生成最优执行计划,执行以下命令更新Join键的统计信息:
    ANALYZE TABLE hive_metastore.pdw COMPUTE STATISTICS FOR COLUMNS pt;
    ANALYZE TABLE hive_metastore.rdm COMPUTE STATISTICS FOR COLUMNS med;
    ANALYZE TABLE hive_metastore.mdw COMPUTE STATISTICS FOR COLUMNS han;
    
  • 排查数据倾斜:查看Databricks的执行计划,检查是否存在某个Task处理的数据量远高于其他任务。如果Join键存在大量重复值(比如NULL或高频值),会导致数据倾斜,可通过以下方式解决:
    • 过滤掉Join键为NULL的异常数据;
    • 对高频Join键添加随机后缀(加盐),拆分Join任务后再合并结果。
  • 调整集群资源配置:如果集群Executor数量不足、内存或CPU资源不够,会导致查询无法推进。适当增加Executor数量,或升级实例规格,提升集群的计算能力。

内容的提问来源于stack exchange,提问作者Derazu_20

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 01:35:03