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

PySpark执行MERGE INTO合并Delta表报mismatched input 'NOT'错误

PySpark Delta表MERGE语法报错修复方案

核心错误原因

  • 拼接SQL字符串时漏加空格:你拆分的多段f字符串中,f"delta.{path}.b= df.d"这行末尾没有预留空格,导致该行结尾的df.d和下一行开头的WHEN直接拼接为无效的df.dWHEN片段,SQL解析器无法识别该语法,因此抛出NOT位置附近的报错。
  • 冗余的表前缀:UPDATE SET子句不需要重复写目标表的完整路径作为前缀,冗余的前缀反而可能因为路径中包含/等特殊字符引发解析异常。
  • 路径引用格式错误:直接通过路径访问Delta表时,需要用反引号包裹完整路径,避免路径中的特殊字符破坏SQL语法结构。

修复后代码

推荐直接使用三引号编写多行SQL,避免拆分拼接时的空格遗漏问题,同时给目标表设置别名简化写法:

path = '/example/example/example/'

self.spark.sql(f"""
MERGE INTO delta.`{path}` AS target 
USING df 
ON target.a = df.a AND target.b = df.b
WHEN MATCHED THEN UPDATE SET 
  c = df.c,
  d = df.d,
  e = df.e,
  a = df.c,
  b = df.d
WHEN NOT MATCHED THEN INSERT *
""")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 08:48:03