spark中的jdbc update语句

zour9fqk  于 2021-05-27  发布在  Spark
关注(0)|答案(1)|浏览(584)

我使用jdbc连接到一个数据库,并尝试运行更新查询。首先我输入查询,然后执行它(以同样的方式执行select,它工作得非常好)。

caseoutputUpdateQuery = "(UPDATE dbo.CASEOUTPUT_TEST SET NOTIFIED = 'YES') alias_output "
spark.read.jdbc(url=jdbcUrl, table=caseoutputUpdateQuery, properties=connectionProperties)

运行此命令时,出现以下错误: A nested INSERT, UPDATE, DELETE, or MERGE statement must have an OUTPUT clause. 我试图用不同的方法来解决这个问题,但总是有另一个错误。例如,我尝试用以下方式重写查询:

caseoutputUpdateQuery = "(UPDATE dbo.CASEOUTPUT_TEST SET NOTIFIED = 'YES' OUTPUT DELETED.*, INSERTED.* FROM dbo.CASEOUTPUT_TEST) alias_output "

但我遇到了一个错误: A nested INSERT, UPDATE, DELETE, or MERGE statement is not allowed in a SELECT statement that is not the immediate source of rows for an INSERT statement. 我试图重写的另一种方式是:

caseoutputUpdateQuery = "(INSERT INTO dbo.UpdateOutput(OldCaseID,NotifiedOld) SELECT * FROM( UPDATE dbo.CASEOUTPUT_TEST SET NOTIFIED = 'YES' OUTPUT deleted.OldCaseID,DELETED.NotifiedOld ) AS tbl) alias_output "

但我有个错误: A nested INSERT, UPDATE, DELETE, or MERGE statement is not allowed inside another nested INSERT, UPDATE, DELETE, or MERGE statement. 我在网上找到的东西我都试过了,但运气不好。您对我如何修复此问题并运行更新语句有什么建议吗?

am46iovg

am46iovg1#

我认为spark不是为update语句用例设计的。spark并不能帮助处理rdbms。我建议使用直接连接,使用您正在编写的代码中的jdbc(我的意思是直接调用jdbc)。如果您使用的是scala,您可以按照这里的建议使用(例如,但是还有其他多种方法),或者按照这里的说明使用python。这些示例到达oracle引擎,但是如果您使用的是mysql、sql server、postgres或任何其他RDMB,请更改驱动程序/连接器

相关问题