apache-spark-sql - 尽管键与“WHEN NOT MATCHED THEN INSERT”子句匹配,但 databricks 增量表合并仍在插入记录
问题描述
我正在对 databricks 增量表执行合并操作,如下所示 -
spark.sql(""" MERGE INTO <delta table name> deltatbl USING <temp view> source
ON deltatbl.col1 = source.col1
AND deltatbl.col2 = source.col2
WHEN NOT MATCHED THEN INSERT
(col1,col2) VALUES(source.Col1,source.Col2) """)
尽管匹配唯一键,但上述查询仍在插入重复记录。如何实现仅插入不匹配记录的输出。所有列都是键的一部分。
解决方案
如果要更新现有记录:
MERGE INTO events
USING updates
ON events.eventId = updates.eventId
WHEN MATCHED THEN
UPDATE SET events.data = updates.data
WHEN NOT MATCHED
THEN INSERT (date, eventId, data) VALUES (date, eventId, data)
如果您只想插入不存在的记录:使用相同的值更新
MERGE INTO events
USING updates
ON events.eventId = updates.eventId
WHEN MATCHED THEN
UPDATE SET events.data = events.data
WHEN NOT MATCHED
THEN INSERT (date, eventId, data) VALUES (date, eventId, data)
你的情况,
MERGE INTO <delta table name> deltatbl USING <temp view> source
ON deltatbl.col1 = source.col1
AND deltatbl.col2 = source.col2
WHEN MATCHED THEN
UPDATE SET deltatbl.data = deltatbl.data
WHEN NOT MATCHED THEN INSERT
(col1,col2) VALUES(source.Col1,source.Col2)
推荐阅读
- python - 如何在 DRF 中更新来自外部 api 的响应
- jquery - 为什么每秒切换一次在附加功能中不起作用?
- spring - Spring Cloud Gateway 的全局异常处理
- r - R Vignette 在内部包功能上失败
- javascript - 按元素 ID 切换日历组件中的类突出显示每个月的相同日期
- javascript - React 组件未更新 redux 状态存储中映射(数据结构)的更改
- sublimetext3 - 如何在 SublimeText-Markdown 中更改 wrap_width?
- laravel - groupBy 正在删除急切加载的关系?
- android - SQLite,科特林,安卓。具有不同数量参数的 SELECT 查询
- bash - 如何配置我的 .travis.yml 文件以运行构建映像的脚本,该脚本已作为 .sh 文件包含在存储库中