在 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。此选项仅适用于 写作。