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

Spark SQL MERGE语句重复执行为何意外插入行而非仅更新?

问题分析与解答

你的MERGE语句语法本身没有问题——因为你只定义了WHEN MATCHED THEN UPDATE分支,完全没有包含WHEN NOT MATCHED THEN INSERT逻辑,所以这条语句绝对不会触发插入操作。

可能的原因排查

  • 如果你说的是目标表my_db.my_table出现额外行:
    • 大概率是你的change_table中存在未匹配目标表的行,但这条MERGE不会处理这些行,除非你有其他并行的插入逻辑在运行。
    • 检查change_table的SYS_CHANGE_OPERATION字段,是不是混入了'I'(插入类型)的行,且有其他代码在处理这些插入型变更。
  • 如果你确实是指change_table出现额外行:
    • 这和这条MERGE语句完全无关——MERGE是从源表读取数据更新目标表,不会修改源表本身。你需要排查change_table的上游写入逻辑,是不是每次执行MERGE前,有新的变更数据被同步到了这个表中。

额外确认点

  • 你是否混淆了“目标表新增行”和“源表新增行”的描述?
  • 重复执行MERGE时,change_table的数据是不是每次都有新增?比如它是CDC变更捕获表,每次执行都会拉取新的变更记录?

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 18:12:45