[Bug] Runtime Filter 错误下推至表达式 JOIN KEY 底层原始字段,LEFT JOIN 右表数据被全盘过滤输出 NULL

Viewed 8
  1. Doris 版本:4.0.7
  2. 复现条件
    左表通过 SUBSTR + CONCAT + CAST 动态拼接字符串作为 JOIN KEY(示例:2026M7/2026H2);
    右维表仅存原始数字 ID mm_id/hy_id,没有预计算好的 period_code 物理字段;
    使用 LEFT JOIN 以计算字段做关联;
    对比验证:若 JOIN KEY 是表原生物理列,则完全无异常。
    示例sql
    -- 左表计算join key
    CONCAT(SUBSTR(mm_id,1,4),'M',CAST(SUBSTR(mm_id,5,2) AS INT)) AS period_code
    -- left join 右表(右表无period_code,只有原始mm_id)
    FROM skeleton LEFT JOIN dim_mm_target t ON skeleton.period_code = t.period_code
  3. 问题现象
    SQL 执行无报错,执行成功但结果错误;
    LEFT JOIN 左表数据完整,右表所有字段全部为 NULL;
    加无关过滤条件 WHERE org_type='BRANCH' 后问题消失:谓词下推改变执行计划,绕开错误的 Runtime Filter 下推路径;
  4. 问题根因
    Runtime Filter 拿到左表拼接字符串值(如2026M7),优化器错误将过滤条件下推到右表底层原始数字字段mm_id;
    字符串 2026M7 和数字 202607 无法匹配,右表在 Scan 阶段被全部过滤,最终左连接右表全空。

该问题属于Wrong Result 逻辑 Bug,Runtime Filter 下推逻辑未识别 JOIN KEY 为复合表达式,错误绑定原始底层字段做过滤;

1 Answers

你这个问题我本地没有复现,您可以加我主页微信,可以同步一下您的case,和 explain 和 profile。