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
相关产品推荐
相关产品推荐

