截断数据块上的表

Posted

技术标签:

【中文标题】截断数据块上的表【英文标题】:Truncate tables on databricks 【发布时间】:2021-03-02 02:53:51 【问题描述】:

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

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

df.write.jdbc()

&

spark.read.jdbc()

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

【问题讨论】:

【参考方案1】:

在Spark documentation中——写的时候需要加上truncate

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

另外,如果您有大量数据,那么使用Microsoft's Spark connector for SQL Server 可能会更好 - 它有一些性能优化,应该可以让写入更快。

【讨论】:

【参考方案2】:

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

【讨论】:

以上是关于截断数据块上的表的主要内容,如果未能解决你的问题,请参考以下文章

Nodejs sequelize 如何截断外键引用的表

文本块上的字符数限制

截断具有许多子分区的表需要很长时间

SSIS字符串截断错误

BigQuery 计划数据传输抛出“不兼容的表分区规范”。错误 - 但错误消息被截断

如何截断外键约束表?