从数据砖对 Azure SQL 数据库中的表执行更新/覆盖



在 Azure Databricks 中,该表已在 Azure SQL 仓库中创建,我想对 Azure SQL 数据库中的现有表执行更新,或者在作业运行时覆盖其内容

我可以附加,但我在执行 etl 时遇到执行更新/覆盖的问题。 我已经尝试了下面的方法,但它删除了表格并尝试使用一组新记录重新创建,这不是我想要的。

def insupd(df,tabname):
df.write.mode("overwrite") 
.format("jdbc") 
.option("url", jdbcUrl) 
.option("dbtable", tabname) 
.option("user",jdbcUsername) 
.option("password", jdbcPassword) 
.option("driver", "com.microsoft.sqlserver.jdbc.SQLServerDriver") 
.save()
return True

需要知道如何在我的情况下执行更新/覆盖。另外,请让我知道需要导入库。

尝试将设置为 true 的截断选项添加到您的写入中:

.option("truncate", True)

请参阅这篇文章来解释这一点:https://www.waitingforcode.com/apache-spark-sql/savemode.overwrite-trap-rdbms-apache-spark-sql/read

从文档中:

这是一个与 JDBC 编写器相关的选项。当保存模式.覆盖为 启用,此选项会导致 Spark 截断现有表 而不是删除并重新创建它。这可以更有效率,并且 防止删除表元数据(例如索引(。 但是,在某些情况下它不起作用,例如当新数据具有 不同的架构。它默认为 false。此选项仅适用于 写作。

最新更新