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)
我正在尝试使用
读取 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)