azure - 如何防止重复条目进入 Azure Storage 的 delta Lake
问题描述
我有一个以 delta 格式存储到 Adls 中的数据框,现在当我尝试将新的更新行附加到该 delta 湖时,它应该有什么方法可以删除 delta 中的旧现有记录并添加新的更新记录。
Delta 中存储的 DataFrame 架构有一个唯一的 Column。通过它我们可以检查记录是更新的还是新的。
解决方案
这是Merge 命令的任务- 您定义合并条件(您的唯一列),然后是操作。在 SQL 中,它可能如下所示(column
是您的唯一列,并且updates
可能是您注册为临时视图的数据框):
MERGE INTO destination
USING updates
ON destination.column = updates.column
WHEN MATCHED THEN
UPDATE SET *
WHEN NOT MATCHED
THEN INSERT *
在 Python 中,它可能如下所示:
from delta.tables import *
deltaTable = DeltaTable.forPath(spark, "/data/destination/")
deltaTable.alias("dest").merge(
updatesDF.alias("updates"),
"dest.column = updates.column") \
.whenMatchedUpdateAll() \
.whenNotMatchedInsertAll() \
.execute()
推荐阅读
- docusignapi - 如何在 docusignapi 沙箱中测试响应式签名?
- javascript - 无法正确指定 CORS 请求的标头
- office-js - excel自定义函数的性能-在线禁用Excel中的自动安全?
- python - 如何导入“Dense3D”并在代码中使用它?
- ignite - Apache Ignite Service Grid:服务调用上下文
- sorting - Elasticsearch 按不在过滤器中的字段值排序
- vue.js - 如何在 vue 文件中使用“paper.on('cell:pointerdblclick', function (cellView){})”之类的方法?
- javascript - Black border arround content in Electron
- rest - 我应该在 OpenAPI 中定义不同的 POST 和 PATCH 模型吗?
- javascript - 将 html 页面加载到 html 页面中会禁用滚动条