Problema al leer tablas JDBC externas después de actualizar desde Databricks Runtime 5.5

Problema

El intento de leer tablas externas a través de JDBC funciona correctamente en Databricks Runtime 5,5, pero se produce un error en las mismas lecturas de tabla Databricks Runtime 6,0 y versiones posteriores.

Verá un error similar al siguiente:

com.databricks.backend.common.rpc.DatabricksExceptions$SQLExecutionException: java.util.concurrent.ExecutionException: org.apache.spark.sql.AnalysisException: org.apache.spark.sql.jdbc does not allow user-specified schemas.
at com.google.common.util.concurrent.AbstractFuture$Sync.getValue(AbstractFuture.java:299)
at com.google.common.util.concurrent.AbstractFuture$Sync.get(AbstractFuture.java:286)
at com.google.common.util.concurrent.AbstractFuture.get(AbstractFuture.java:116)
at java.lang.Thread.run(Thread.java:748)
.
Caused by: org.apache.spark.sql.AnalysisException: org.apache.spark.sql.jdbc does not allow user-specified schemas.;

at org.apache.spark.sql.execution.datasources.DataSource.resolveRelation(DataSource.scala:350)

Causa

Databricks Runtime 5,5 y versiones inferiores deducen el session_id atributo como smallint . Databricks Runtime 6,0 y versiones posteriores deducen el session_id atributo como int .

Este cambio en el session_id atributo hace que se produzca un error de esquema en las consultas.

Solución

Si usa tablas externas creadas en Databricks Runtime 5,5 y versiones anteriores en Databricks Runtime 6,0 y versiones posteriores, debe establecer la configuración de Apache Spark spark.sql.legacy.mssqlserver.numericMapping.enabled en true . Esto garantiza que Databricks Runtime 6,0 y versiones posteriores deducen el session_id atributo como smallint .

  1. Abra la página clústeres .
  2. Seleccione un clúster.
  3. Haga clic en Editar.
  4. Haz clic en Opciones avanzadas.
  5. Haga clic en Spark.
  6. En el campo configuración de Spark , escriba spark.sql.legacy.mssqlserver.numericMapping.enabled true .
  7. Guarde el cambio e inicie o reinicie el clúster.