首页 > 解决方案 > Synapse Spark SQL Delta 合并输入不匹配错误

问题描述

我正在尝试更新历史表,但出现合并错误。当我运行这个单元格时:

%%sql

select * from main
UNION
select * from historical
where Summary_Employee_ID=25148

我得到一个两行表,如下所示: EmployeeID Name 25148 Wendy Clampett 25148 Wendy Monkey

我正在尝试更新名称...使用以下合并命令

%%sql
MERGE INTO main m
using historical h
on m.Employee_ID=h.Employee_ID
WHEN MATCHED THEN 
    UPDATE SET 
        m.Employee_ID=h.Employee_ID,
        m.Name=h.Name
WHEN NOT MATCHED THEN
    INSERT(Employee,Name)
    VALUES(h.Employee,h.Name)

这是我的错误:

错误:不匹配的输入 'MERGE' 期望 {'(', 'SELECT', 'FROM', 'ADD', 'DESC', 'WITH', 'VALUES', 'CREATE', 'TABLE', 'INSERT', ' DELETE','DESCRIBE','EXPLAIN','SHOW','USE','DROP','ALTER','MAP','SET','RESET','START','COMMIT','ROLLBACK' 、“减少”、“刷新”、“清除”、“缓存”、“未缓存”、“DFS”、“截断”、“分析”、“列表”、“撤销”、“授予”、“锁定”、“ UNLOCK', 'MSCK', 'EXPORT', 'IMPORT', 'LOAD'}(第 1 行,位置 0)

标签: azureapache-sparkazure-synapsedelta

解决方案


Synapse 不支持 sql 合并,如 databricks。但是,您可以使用 python 解决方案。注意历史真的是我的更新......

因此,对于上述内容,我使用了:

import delta

main = delta.DeltaTable.forPath(spark,"path")

(main
    .alias("main")
    .merge(historical.alias("historical"),
    .whenMatchedUpdate(set = {main.Employee_ID=historical.Employee_ID})
    .whenNotMathcedInsert(values = 
        {"employeeID":"historical.employeeID","name"="historical.name})
.execute()
)

推荐阅读