使用MERGE INTO更新Azure Databricks表时出现语法错误
问题分析与解决
核心问题1:临时视图名称不匹配
你创建的临时视图名称是myTemp,但MERGE语句里引用的是temp_table,Spark会找不到对应表,这是第一个错误点。
核心问题2:MERGE INTO语法错误
在Spark Delta Lake的MERGE INTO语法中,WHEN MATCHED分支仅支持UPDATE操作,INSERT操作只能用于WHEN NOT MATCHED分支(用于插入新行)。你的需求是更新匹配id的现有行的列值,必须用UPDATE替代INSERT。
修正后的代码
# 确保临时视图名称正确 spark_df = spark.createDataFrame(df) spark_df.createOrReplaceTempView("myTemp") # 修正MERGE INTO语句 spark.sql( f"""MERGE INTO prp_b901_group_work.test_cg_policies_multiple_delta AS m USING myTemp AS s ON m.id = s.id WHEN MATCHED THEN UPDATE SET m.premium_usd = s.premium_usd, m.limit_usd = s.limit_usd""" )
补充说明
如果需要同时处理匹配行更新、不匹配行插入的场景,可以扩展语句:
MERGE INTO prp_b901_group_work.test_cg_policies_multiple_delta AS m USING myTemp AS s ON m.id = s.id WHEN MATCHED THEN UPDATE SET m.premium_usd = s.premium_usd, m.limit_usd = s.limit_usd WHEN NOT MATCHED THEN INSERT (id, premium_usd, limit_usd) VALUES (s.id, s.premium_usd, s.limit_usd)
内容的提问来源于stack exchange,提问作者pymat
相关产品推荐
相关产品推荐

