Spark JDBC:spark.read 中的语法不正确

Spark JDBC: Incorrect syntax in spark.read

我正在尝试使用

读取 table 中的最大 id
  _select_sql = f"(SELECT MAX(id) FROM {tablename})"
  highest_id = spark.read.jdbc(url, table=_select_sql, properties=properties)

执行此操作后我得到:

com.microsoft.sqlserver.jdbc.SQLServerException: Incorrect syntax near the keyword 'WHERE'

当我尝试使用 highest_id = spark.read.jdbc(url, table=tablename, properties=properties) 读取所有数据时,一切都很好。

你知道哪里会出错吗?

编辑:

改成后

_select_sql = f"(SELECT MAX(id) FROM {tablename}"

我得到:

com.microsoft.sqlserver.jdbc.SQLServerException: Incorrect syntax near '0'.

您将查询用作 table 名称 - 这将不起作用。您需要改用 query 选项(参见 docs):

highest_id = spark.read.format("jdbc") \
  .option("url", jdbcUrl) \
  .option("query", f"SELECT MAX(id) FROM {tablename}") \
  .load() 

我用

解决了这个问题
_select_sql = f"(SELECT TOP(1) id FROM {tablename} ORDER BY id DESC)"

无论如何都要感谢 Alex Ott,它只在他提供的方式下起作用。真的不知道为什么因为一些消息来源告诉这应该以类似的方式工作:

df = spark.read.jdbc(url = url, table = query, properties = properties)