Solución de problemas en la ingesta de datos de SQL Server

En esta página se describen los problemas comunes con el conector de Microsoft SQL Server en Databricks Lakeflow Connect y cómo resolverlos.

Para obtener instrucciones generales de solución de problemas que se aplican a todas las canalizaciones de ingesta administradas, consulte Solución de problemas de canalizaciones de ingesta administradas.

Comprobación de si CDC está habilitado para una base de datos o una tabla

Para comprobar si CDC está habilitado para la base de datos <database-name>:

select is_cdc_enabled from sys.databases where name='<database-name>';

Para comprobar si CDC está habilitado para la tabla <schema-name>.<table-name>:

select t.is_tracked_by_cdc
from sys.tables t join sys.schemas s on t.schema_id = s.schema_id
where s.name='<schema-name>' and t.name='<table-name>';

Compruebe si el seguimiento de cambios está habilitado para una base de datos o una tabla

Para comprobar si el seguimiento de cambios está habilitado para la base de datos\<database-name\>:

select ctdb.*

from sys.change_tracking_databases ctdb join sys.databases db

    on db.database_id  = ctdb.database_id

where db.name = '<MyDatabaseName>'

Para comprobar si el seguimiento de cambios está habilitado para la tabla <schema-name>.<table-name>:

select s.name schema_name, t.name table_name, ct.*

from sys.change_tracking_tables ct join sys.tables t

    on ct.object_id = t.object_id

    join sys.schemas s on t.schema_id = s.schema_id

where s.name = '<MySchemaName>' and t.name = '<MyTableName>'

Tiempo de espera agotado al esperar un token de tabla

La canalización de ingesta puede agotar el tiempo de espera mientras espera a que la puerta de enlace proporcione información. Esto puede deberse a lo siguiente:

  • Está utilizando una versión anterior del gateway.
  • Error al generar la información necesaria. Compruebe si hay errores en los registros del controlador de puerta de enlace.

Nota:

El flujo de actualización completa reduce significativamente la aparición de errores de tiempo de espera durante las operaciones de actualización completa. Ver Comportamiento de actualización completa (CDC).

autenticación predeterminada: no se pueden configurar las credenciales predeterminadas

Si recibe este error, hay un problema con la detección de las credenciales de usuario actuales. Intente reemplazar lo siguiente:

w = WorkspaceClient()

con:

w = WorkspaceClient(host=input('Databricks Workspace URL: '), token=input('Token: '))

Consulte Autenticación en la documentación del SDK de Databricks para Python.

tech.replicant.common.ExtractorException: com.microsoft.sqlserver.jdbc.SQLServerException: nombre de columna "SERIAL_NUMBER" no válido.

Es posible que reciba este error si usa una versión anterior de una tabla interna. Ejecute lo siguiente en la base de datos conectada:

drop table dbo.replicate_io_audit_ddl_trigger_1;

PERMISSION_DENIED: No estás autorizado para crear clústeres. Póngase en contacto con el administrador.

Póngase en contacto con un administrador de la cuenta de Databricks para que le concedan Unrestricted cluster creation permisos.

DLT ERROR CODE: INGESTION_GATEWAY_INTERNAL_ERROR

Comprueba el stdout archivo(s) en los registros del controlador.

Conflicto de nombres de tabla fuente

Ingestion pipeline error: "org.apache.spark.sql.catalyst.ExtendedAnalysisException: Cannot have multiple queries named `XYZ_snapshot_load` for `XYZ`. Additional queries on that table must be named. Note that unnamed queries default to the same name as the table.

Esto indica que existe un conflicto de nombres debido a que hay varias tablas de origen denominadas XYZ en diferentes esquemas de origen que están siendo importadas por la misma canalización de importación al mismo esquema de destino.

Crea varios pares de pasarela-canalización que escriban estas tablas en conflicto en diferentes esquemas de destino.

Cambios de esquema incompatibles

Un cambio de esquema incompatible causa que la canalización de ingesta falle con un error INCOMPATIBLE_SCHEMA_CHANGE. Para continuar con la replicación, desencadene una actualización completa de las tablas afectadas.

Nota:

Databricks no puede garantizar que, al producirse un error en la canalización de ingesta debido a un cambio de estructura incompatible, se hayan ingerido todas las filas anteriores al cambio de estructura.

CAMBIO_DE_ESQUEMA_NO_INCREMENTAL

NON_INCREMENTAL_SCHEMA_CHANGE: Column '<column>' was added to table '<table>'. A full refresh is required to continue incremental ingestion.

Este error se produce cuando se agrega una nueva columna a una tabla de origen mientras la ingesta incremental está activa. El conector no puede rerrellenar los valores de la nueva columna de los datos de cambios históricos, por lo que se requiere una actualización completa.

Ejecute una actualización completa de la tabla afectada para reanudar la ingesta. Consulte Tablas de destino de actualización completa.

MISSING_TABLE_IN_SOURCE

MISSING_TABLE_IN_SOURCE: Table '<schema>.<table>' could not be found in the source database.

Este error se produce cuando ya no se encuentra una tabla que estaba disponible anteriormente en la base de datos de origen. Entre las causas comunes se incluyen las siguientes:

  • La tabla se ha renombrado o se ha eliminado en la fuente.
  • La tabla no está disponible temporalmente, por ejemplo, durante una ventana de mantenimiento.

Para resolver este problema:

  • Si la tabla no está disponible temporalmente, espere a que se complete el mantenimiento y vuelva a intentar la canalización.
  • Si se ha cambiado el nombre o se ha vuelto a crear la tabla, ejecute una actualización completa de la tabla afectada.
  • Si la tabla se ha eliminado intencionadamente, elimínala del proceso.

Errores HTTP 403 al acceder al almacenamiento de Azure

Si tu pipeline falla con un error como INTERNAL_ERROR: Server returned HTTP response code: 403 for URL, tu cálculo puede que no tenga acceso al endpoint de almacenamiento de Azure usado por el conector de SQL Server.

Ejecuta las siguientes pruebas en un notebook de Azure Databricks para aislar el problema. Úsalo dbutils.secrets para recuperar tu token de firma de acceso compartido (SAS) en lugar de codificarlo de forma fija.

Acceso de prueba al endpoint DFS (ADLS Gen2)

El siguiente fragmento lista, lee y escribe en el endpoint Gen2 de Azure Data Lake Storage (ADLS), también llamado endpoint del Sistema de Archivos Distribuidos (DFS). Sustituye los valores provisionales por tu cuenta de almacenamiento, contenedor y detalles secretos, y luego ejecútalo para confirmar si el token SAS puede llegar al endpoint DFS:

storage_account = "<storage-account>"
container = "<container>"
sas_token = dbutils.secrets.get(scope="<scope>", key="<key>")

spark.conf.set(
    f"fs.azure.sas.{container}.{storage_account}.dfs.core.windows.net",
    sas_token
)

base_path = f"abfss://{container}@{storage_account}.dfs.core.windows.net/"

# List contents
display(dbutils.fs.ls(base_path))

# Read a file
df = spark.read.format("parquet").load(base_path + "<path-to-file>")
display(df.limit(10))

# Write a test file
df.write.format("delta").save(base_path + "_connectivity_test")

Acceso de prueba al extremo del blob

Si la prueba DFS tiene éxito pero tu pipeline sigue fallando, el conector podría estar usando el endpoint blob en su lugar. El siguiente fragmento ejecuta las mismas comprobaciones de enumeración, lectura y escritura en el punto de conexión de blobs:

storage_account = "<storage-account>"
container = "<container>"
sas_token = dbutils.secrets.get(scope="<scope>", key="<key>")

spark.conf.set(
    f"fs.azure.sas.{container}.{storage_account}.blob.core.windows.net",
    sas_token
)

base_path = f"wasbs://{container}@{storage_account}.blob.core.windows.net/"

# List files
display(dbutils.fs.ls(base_path))

# Read a file
df = spark.read.format("parquet").load(base_path + "<path-to-file>")
display(df.limit(10))

# Write a test file
df.write.format("delta").save(base_path + "_connectivity_test")

Si alguna de las pruebas devuelve un error 403, el token SAS carece de los permisos requeridos o no cubre el endpoint correcto. Verifica que el token SAS conceda al menos permisos de Lectura y Lista en el contenedor, y regéneralo si es necesario.

Errores de certificado de servidor TLS

Para solucionar problemas de errores de validación de certificados de servidor TLS, consulte Solución de errores de certificado TLS.