從Databricks Runtime 5.5升級後讀取外部JDBC表時遇到問題

從Databricks Runtime 5.5升級到6.0及以上版本後讀取外部JDBC表失敗。

寫的穆罕默德。Haseeb

最後發布於:2022年5月23日

問題

嚐試通過JDBC讀取外部表在Databricks Runtime 5.5上工作正常,但相同的表讀取在Databricks Runtime 6.0和更高版本上失敗。

你會看到一個類似如下的錯誤:

com.databricks.backend.common.rpc.DatabricksExceptions$SQLExecutionException: java.util.concurrent.ExecutionException: org.apache.spark.sql.AnalysisException: org.apache.spark.sql.jdbc不允許用戶指定的模式。at com.google.common.uti.concurrent.abstractfuture $Sync.getValue(AbstractFuture.java:299) at com.google.common.uti.concurrent.abstractfuture $Sync.get(AbstractFuture.java:286) at com.google.common.uti.concurrent.abstractfuture.get (AbstractFuture.java:116) at java.lang.Thread.run(Thread.java:748)。由:org.apache.spark.sql.AnalysisException: org.apache.spark.sql.jdbc不允許用戶指定的模式。;org.apache.spark.sql.execution.datasources.DataSource.resolveRelation (DataSource.scala: 350)

導致

Databricks Runtime 5.5及以下版本推斷session_id屬性作為一個短整型。Databricks Runtime 6.0及以上版本推斷session_id屬性作為一個int

的更改session_id屬性導致查詢失敗,存在模式問題。

解決方案

如果您正在使用在Databricks Runtime 5.5及以下在Databricks Runtime 6.0及以上版本中創建的外部表,則必須設置Apache Spark配置spark.sql.legacy.mssqlserver.numericMapping.enabled真正的。這確保Databricks Runtime 6.0及以上版本推斷session_id屬性作為一個短整型

  1. 打開集群頁麵。
  2. 選擇一個集群。
  3. 點擊編輯
  4. 點擊高級選項
  5. 點擊火花
  6. 火花配置字段中,輸入spark.sql.legacy.mssqlserver.numericMapping.enabled真實
  7. 保存更改並啟動或重新啟動集群。