格式错误的 SQL 语句:预期的标记 'USING' 但找到了值为 't' 的标识符
Malformed SQL Statement: Expected token 'USING' but found Identifier with value 't' instead
我正在尝试使用 Databricks 中的以下代码与 pyspark
合并到 SQL 数据库
query = """
MERGE INTO deltadf t
USING df s
ON s.SLAId_Id = t.SLAId_Id
WHEN MATCHED THEN UPDATE SET *
WHEN NOT MATCHED THEN INSERT *
"""
driver_manager = spark._sc._gateway.jvm.java.sql.DriverManager
con = driver_manager.getConnection(url) #
stmt = con.createStatement()
stmt.executeUpdate(query)
stmt.close()
但我收到以下错误:
SQLException: Malformed SQL Statement: Expected token 'USING' but found Identifier with value 't' instead at position 25.
有什么地方可能出错的想法吗?
SQLException: Malformed SQL Statement: Expected token 'USING' but found Identifier with value 't' instead at position 25.
如果您错过更新任何特定字段或特定语法,您将收到此错误。
我执行了 merge operation 它对我来说工作正常没有错误,请按照下面的参考。
参考:
https://www.youtube.com/watch?v=i5oM2bUyH0o
https://docs.databricks.com/delta/delta-update.html#upsert-into-a-table-using-merge
https://www.sqlshack.com/sql-server-merge-statement-overview-and-examples/
我不知道你为什么会收到这个确切的错误。但是,我认为您尝试做的事情存在很多问题。
运行 通过 JDBC 的查询使其仅在 SQL 服务器中成为 运行。像 WHEN MATCHED THEN UPDATE SET *
/ WHEN NOT MATCHED INSERT *
这样的构造将不起作用。 Databricks 接受它,但对于 SQL 服务器,您需要明确提供要更新的列和要插入的值 (reference)。
此外,您实际上在 SQL 服务器中有名为 deltadf
和 df
的表吗?我想你有一个名为 df
的 Dataframe 或临时视图......这将不起作用。如前所述,此查询仅在 SQL 服务器中执行。如果您想从 Dataframe 上传数据,请使用 df.write.format("jdbc").save
(reference).
参见 this Fiddle - 如果 deltadf
和 df
是表,运行 在 SQL 服务器(任何版本)中执行此查询只会抱怨Incorrect syntax near '*'
.
我正在尝试使用 Databricks 中的以下代码与 pyspark
合并到 SQL 数据库query = """
MERGE INTO deltadf t
USING df s
ON s.SLAId_Id = t.SLAId_Id
WHEN MATCHED THEN UPDATE SET *
WHEN NOT MATCHED THEN INSERT *
"""
driver_manager = spark._sc._gateway.jvm.java.sql.DriverManager
con = driver_manager.getConnection(url) #
stmt = con.createStatement()
stmt.executeUpdate(query)
stmt.close()
但我收到以下错误:
SQLException: Malformed SQL Statement: Expected token 'USING' but found Identifier with value 't' instead at position 25.
有什么地方可能出错的想法吗?
SQLException: Malformed SQL Statement: Expected token 'USING' but found Identifier with value 't' instead at position 25.
如果您错过更新任何特定字段或特定语法,您将收到此错误。
我执行了 merge operation 它对我来说工作正常没有错误,请按照下面的参考。
参考:
https://www.youtube.com/watch?v=i5oM2bUyH0o
https://docs.databricks.com/delta/delta-update.html#upsert-into-a-table-using-merge
https://www.sqlshack.com/sql-server-merge-statement-overview-and-examples/
我不知道你为什么会收到这个确切的错误。但是,我认为您尝试做的事情存在很多问题。
运行 通过 JDBC 的查询使其仅在 SQL 服务器中成为 运行。像 WHEN MATCHED THEN UPDATE SET *
/ WHEN NOT MATCHED INSERT *
这样的构造将不起作用。 Databricks 接受它,但对于 SQL 服务器,您需要明确提供要更新的列和要插入的值 (reference)。
此外,您实际上在 SQL 服务器中有名为 deltadf
和 df
的表吗?我想你有一个名为 df
的 Dataframe 或临时视图......这将不起作用。如前所述,此查询仅在 SQL 服务器中执行。如果您想从 Dataframe 上传数据,请使用 df.write.format("jdbc").save
(reference).
参见 this Fiddle - 如果 deltadf
和 df
是表,运行 在 SQL 服务器(任何版本)中执行此查询只会抱怨Incorrect syntax near '*'
.