com.microsoft.sqlserver.jdbc.SQLServerException:从 Apache Spark Databricks 读取 Azure SQLDB 时出错

com.microsoft.sqlserver.jdbc.SQLServerException: Error when reading Azure SQLDB from Apache Spark Databricks

我回答了我之前的一个问题,但是,在解决了这个问题之后,我面临着另一个关于 SQLServerException 的问题。

我正在尝试读入 Azure SQLDB 上的数据。 我已成功通过服务器身份验证,但是当我尝试应用该函数读取数据时,出现以下错误:

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

以下是有关错误的更多详细信息:

Py4JJavaError                             Traceback (most recent call last)
<command-3741352302548628> in readFromDb(processId, query)
      3   try:
----> 4     jdbcDF = (spark.read
      5       .format("jdbc")

/databricks/spark/python/pyspark/sql/readwriter.py in load(self, path, format, schema, **options)
    209         else:
--> 210             return self._df(self._jreader.load())
    211 

/databricks/spark/python/lib/py4j-0.10.9-src.zip/py4j/java_gateway.py in __call__(self, *args)
   1303         answer = self.gateway_client.send_command(command)
-> 1304         return_value = get_return_value(
   1305             answer, self.gateway_client, self.target_id, self.name

代码如下:

def readFromDb(processId, query):
  try:
    jdbcDF = (spark.read
      .format("jdbc")
      .option("driver", "com.microsoft.sqlserver.jdbc.SQLServerDriver")
      .option("url", f"jdbc:sqlserver://{DBServer}.database.windows.net;database={DBDatabase}")
      .option("user", DBUser)
      .option("query", query)
      .option("password", DBPword)
      .load()    
     )
    return jdbcDF
  except Exception as e:
    writeToLogs(processId,LogType.Error, EventType.FailReadFromDb, LogMessage.FailReadFromDb, errorType = ErrorType.FailReadFromDb)
    raise Error(f"{LogMessage.FailReadFromDb.value} ERROR: {e}")
  except:
    writeToLogs(processId,LogType.FailReadFromDb, EventType.FailReadFromDb, LogMessage.FailReadFromDb, errorType = ErrorType.FailReadFromDb)
    raise Error(f"{LogMessage.FailReadFromDb.value}")

有人可以让我知道代码的一般含义以及修复它的最佳方法吗?

就像@mac 和Alex Ott 说的,错误主要是由查询语句引起的。

我们很高兴听到通过修改查询解决了错误。