在Databricks SQL和Databricks Runtime 12.1及更高版本中,可以使用WHEN NOT MATCHED BY SOURCE子句更新或删除目标表中在源表中没有相应记录的记录。Databricks建议添加可选条件子句,以避免完全重写目标表。
下面的代码示例显示了允许更新和新行反映在目标表中。有人可以帮助修改下面的代码,以允许删除也反映在目标表中吗?我认为正确表达此要求的方法是用源表的内容覆盖目标表,并删除目标表中不匹配的记录。
try:
#Perform a merge into the existing table
if allowDuplicates == "true":
(deltadf.alias("t")
.merge(
partdf.alias("s"),
f"s.primary_key_hash = t.primary_key_hash")
.whenNotMatchedInsertAll()
.execute()
)
else:
(deltadf.alias("t")
.merge(
partdf.alias("s"),
"s.primary_key_hash = t.primary_key_hash")
.whenMatchedUpdateAll("s.change_key_hash <> t.change_key_hash")
.whenNotMatchedInsertAll().
execute()
)
action = f"Merged into Existing Delta for table {entityName} at path: {saveloc}"
spark.sql(f"OPTIMIZE {stageName}{regName}")
except Exception as e:
print(e)
1条答案
按热度按时间3hvapo4f1#
在Python API中添加了一个新函数:
.whenNotMatchedBySourceDelete()
你需要将它添加到你的代码中:
但是你至少需要使用DBR12.1-它在较低版本中不可用