我在azure中使用两个环境:databricks和sql数据库。我正在使用一个函数来生成一个Dataframe,它将用来覆盖存储在sql数据库中的表。我有很多问题,因为df.write.jdbc(mode='overwrite')只会删除表,而且,我猜,我的用户没有正确的权限来再次创建表(我已经看到dml和ddl权限需要这样做)。在resume中,我的函数只会删除表,但不会重新创建。
我们讨论了可能出现的问题,并得出结论,也许我能做的最好的事情是截断表并在那里重新添加新数据。我试图找到如何截断表,我尝试了以下两种方法,但找不到更多与此相关的信息:
df.write.jdbc()
&
spark.read.jdbc()
你能帮我拿这些吗?覆盖不起作用(可能我没有足够的权限),我也不知道如何使用jdbc截断该表。
2条答案
按热度按时间dwbf0jvd1#
它在spark文档中-您需要添加
truncate
写作时:另外,如果您有大量数据,那么最好使用microsoft的spark connector for sql server—它有一些性能优化,可以加快写入速度。
ahy6op9u2#
您可以在sql server中创建用于截断或删除的存储过程,并使用odbc连接在databricks中调用该存储过程。