截断数据块上的表

时间:2021-03-02 02:53:51

标签: apache-spark pyspark azure-sql-database databricks azure-databricks

我在 Azure 中使用两个环境:Databricks 和 SQL 数据库。我正在使用一个函数来生成一个数据框,它将用于覆盖存储在 SQL 数据库中的表。我有很多问题,因为 df.write.jdbc(mode = 'overwrite') 只删除表,我猜我的用户没有再次创建的正确权限(我已经看到了 DML 和我需要这样做的 DDL 许可)。在简历中,我的函数只删除了表,但没有重新创建。

我们讨论了可能是什么问题,我们得出的结论是,也许我能做的最好的事情是截断表格并在那里重新添加新数据。我试图找到如何截断表格,我尝试了这两种方法,但找不到与此相关的更多信息:

df.write.jdbc()

&

spark.read.jdbc()

你能帮我解决这些问题吗?覆盖不起作用(也许我没有足够的权限),我不知道如何使用 jdbc 截断该表。

2 个答案:

答案 0 :(得分:2)

它在 Spark documentation 中 - 编写时需要添加 truncate

df.write.mode("overwrite").option("truncate", "true")....save()

此外,如果您有大量数据,那么使用 Microsoft's Spark connector for SQL Server 可能更好 - 它具有一些性能优化,应该可以提高写入速度。

答案 1 :(得分:1)

您可以在 SQL Server 中创建用于截断或删除的存储过程,并使用 ODBC 连接在数据块中调用该存储过程。