我试图通过使用
读取表中的最大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'.
您正在使用query作为表名-这将不起作用。您需要使用query
选项来代替(参见文档):
highest_id = spark.read.format("jdbc")
.option("url", jdbcUrl)
.option("query", f"SELECT MAX(id) FROM {tablename}")
.load()
Spark内部创建如下SQL语句
SELECT * FROM <table>
所以,如果你想要一个语句作为表参数,它必须看起来像这样(只是给内联视图添加一个名称):
_select_sql = f"(SELECT MAX(id) FROM {tablename}) tab"
和火花创建的SQL将看起来像这样,并完成工作:
SELECT * FROM (SELECT MAX(id) FROM mytable) tab
我使用
解决了这个问题_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)