azure - 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)
解决方案
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()
)
推荐阅读
- formula - 按建造者和工作日计算总和的公式
- reactjs - 在 reactjs 中隐藏组件
- nativescript - 本机脚本有点支持吗?
- r - 用于精确重复次数的量词 grepl
- .net - 如何从 ADODB 嵌入互操作类型?
- ms-access - [MS Access VBA]如何使用带有文本前缀的自动编号主键创建表
- javascript - 复选框输入保持选中状态?
- android - 无法在 Android Studio 上运行模拟器 || 视窗 10
- python - Python 项目声明它需要 Python 3 和 Python2 的正确方法是什么?
- kubernetes - 根据kubernetes中对应的token获取serviceaccount信息?