【问题标题】:Jdbc update statement in sparkspark中的jdbc更新语句
【发布时间】:2020-11-12 06:26:45
【问题描述】:

我使用 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.

我确实尝试了我在互联网上找到的所有东西,但没有运气。您对我如何解决这个问题并运行我的更新语句有什么建议吗?

【问题讨论】:

    标签: apache-spark jdbc databricks


    【解决方案1】:

    我认为 Spark 不是为那个 UPDATE 语句用例而设计的。这不是 Spark 可以帮助处理 RDBMS 的场景。我建议使用您正在编写的代码中的 JDBC 使用直接连接(我的意思是直接调用该 JDBC)。如果您使用的是 Scala,则可以按照建议使用 here(例如,但还有其他多种方式)或从 Python 中使用,如 here 所述。这些示例到达 Oracle 引擎,但如果您使用 MySQL、SQL Server、Postgres 或任何其他 RDMBS,请更改驱动程序/连接器

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-29
      • 2021-07-07
      • 2014-12-03
      • 2015-07-23
      相关资源
      最近更新 更多