- Doris 版本:4.0.7
- 复现条件
左表通过 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 - 问题现象
SQL 执行无报错,执行成功但结果错误;
LEFT JOIN 左表数据完整,右表所有字段全部为 NULL;
加无关过滤条件 WHERE org_type='BRANCH' 后问题消失:谓词下推改变执行计划,绕开错误的 Runtime Filter 下推路径; - 问题根因
Runtime Filter 拿到左表拼接字符串值(如2026M7),优化器错误将过滤条件下推到右表底层原始数字字段mm_id;
字符串 2026M7 和数字 202607 无法匹配,右表在 Scan 阶段被全部过滤,最终左连接右表全空。
该问题属于Wrong Result 逻辑 Bug,Runtime Filter 下推逻辑未识别 JOIN KEY 为复合表达式,错误绑定原始底层字段做过滤;