我在Azure中使用两个环境:Databricks和SQL数据库。我正在使用一个函数,该函数生成一个数据框架,它将用于覆盖存储在SQL数据库中的表。我有很多问题,因为d。write。jdbc(mode = 'overwrite')只删除表,我猜,我的用户没有正确的权限来再次创建(我已经看到了DML和DDL权限,我需要这样做)。在resume中,my functions只删除表,而不重新创建。
我们讨论了可能出现的问题,并得出结论,也许我能做的最好的事情是截断表并在那里重新添加新数据。我试图找到如何截断表,我尝试了这两种方法,但我找不到更多相关的信息:
df.write.jdbc()
和
spark.read.jdbc()
你能帮我拿一下这些吗?覆盖不起作用(可能我没有足够的权限),我不知道如何使用jdbc截断该表。
它在Spark文档中-您需要在编写时添加truncate
:
df.write.mode("overwrite").option("truncate", "true")....save()
另外,如果你有很多数据,那么最好使用Microsoft的Spark连接器,它有一些性能优化,可以让你写得更快。
您可以在SQL Server中创建截断或删除存储过程,并使用ODBC连接在数据块中调用该存储过程。