Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Questa pagina descrive i problemi comuni relativi al connettore Microsoft SQL Server in Databricks Lakeflow Connect e come risolverli.
Per indicazioni generali sulla risoluzione dei problemi applicabili a tutte le pipeline di inserimento gestite, vedere Risolvere i problemi relativi alle pipeline di inserimento gestite.
Verificare se il CDC è abilitato per un database o una tabella
Per verificare se CDC è abilitato per il database <database-name>:
select is_cdc_enabled from sys.databases where name='<database-name>';
Per verificare se CDC è abilitato per la tabella <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>';
Controllare se il rilevamento delle modifiche è abilitato per un database o una tabella
Per verificare se il rilevamento delle modifiche è abilitato per il database\<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>'
Per verificare se il rilevamento delle modifiche è abilitato per la tabella <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>'
Timeout durante l'attesa del token della tabella
La pipeline di inserimento potrebbe scadere mentre si attendono le informazioni fornite dal gateway. Questo potrebbe essere dovuto al fatto che:
- Stai eseguendo una versione precedente del gateway.
- Si è verificato un errore durante la generazione delle informazioni necessarie. Controllare i log del driver del gateway per eventuali errori.
Annotazioni
Il flusso di aggiornamento completo riduce significativamente l'occorrenza di errori di timeout durante le operazioni di aggiornamento complete. Vedere Comportamento di aggiornamento completo (CDC).
autenticazione predefinita: non è possibile configurare le credenziali predefinite
Se viene visualizzato questo errore, si verifica un problema relativo all'individuazione delle credenziali utente correnti. Provare a sostituire quanto segue:
w = WorkspaceClient()
con:
w = WorkspaceClient(host=input('Databricks Workspace URL: '), token=input('Token: '))
Vedere Autenticazione nella documentazione di Databricks SDK per Python.
tech.replicant.common.ExtractorException: com.microsoft.sqlserver.jdbc.SQLServerException: nome di colonna non valido 'SERIAL_NUMBER'.
Questo errore potrebbe essere visualizzato se si usa una versione precedente di una tabella interna. Eseguire quanto segue nel database connesso:
drop table dbo.replicate_io_audit_ddl_trigger_1;
PERMISSION_DENIED: Non sei autorizzato a creare cluster. Contatta l'amministratore.
Contatta un amministratore dell'account Databricks affinché ti conceda le autorizzazioni Unrestricted cluster creation.
CODICE ERRORE DLT: ERRORE INTERNO DEL GATEWAY DI INGESTIONE
Controllare il/i stdout file nei log dei driver.
Conflitto di denominazione delle tabelle di origine
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.
Ciò indica che è presente un conflitto di nomi a causa di più tabelle di origine denominate XYZ in schemi di origine diversi inseriti dalla stessa pipeline di inserimento nello stesso schema di destinazione.
Creare più coppie di gateway e pipeline che scrivono queste tabelle in conflitto in schemi di destinazione diversi.
Modifiche dello schema incompatibili
Una modifica incompatibile dello schema provoca un fallimento della pipeline di inserimento con un errore INCOMPATIBLE_SCHEMA_CHANGE. Per continuare la replica, attivare un aggiornamento completo delle tabelle interessate.
Annotazioni
Databricks non può garantire che al momento in cui la pipeline di inserimento abbia esito negativo per una modifica dello schema incompatibile, tutte le righe prima della modifica dello schema sono state inserite.
NON_INCREMENTAL_SCHEMA_CHANGE
NON_INCREMENTAL_SCHEMA_CHANGE: Column '<column>' was added to table '<table>'. A full refresh is required to continue incremental ingestion.
Questo errore si verifica quando una nuova colonna viene aggiunta a una tabella di origine mentre l'inserimento incrementale è attivo. Il connettore non può eseguire il backfill dei valori per la nuova colonna dai dati delle modifiche cronologiche, quindi è necessario un aggiornamento completo.
Eseguire un refresh completo della tabella interessata per riprendere l'ingestione. vedere Aggiornare completamente le tabelle di destinazione.
MISSING_TABLE_IN_SOURCE
MISSING_TABLE_IN_SOURCE: Table '<schema>.<table>' could not be found in the source database.
Questo errore si verifica quando non è più possibile trovare una tabella precedentemente disponibile nel database di origine. Le cause più comuni includono:
- La tabella è stata rinominata o eliminata nella sorgente.
- La tabella non è temporaneamente disponibile, ad esempio durante una finestra di manutenzione.
Per risolvere:
- Se la tabella è temporaneamente non disponibile, attendere il completamento della manutenzione, quindi rieseguire la pipeline.
- Se la tabella è stata rinominata o ricreata, eseguire un aggiornamento completo della tabella interessata.
- Se la tabella è stata eliminata intenzionalmente, rimuovila dalla pipeline.
Errori HTTP 403 nell'accesso allo storage Azure
Se la tua pipeline fallisce con un errore come INTERNAL_ERROR: Server returned HTTP response code: 403 for URL, il tuo calcolo potrebbe non avere accesso all'endpoint di archiviazione Azure usato dal connettore SQL Server.
Esegui i seguenti test in un notebook Azure Databricks per isolare il problema. Usalo dbutils.secrets per recuperare il token della firma di accesso condiviso (SAS) invece di codificarlo in modo rigido.
Prova l'accesso all'endpoint DFS (ADLS Gen2)
Il seguente snippet elenca, legge e scrive sull'endpoint Gen2 di Azure Data Lake Storage (ADLS), chiamato anche endpoint Distributed File System (DFS). Sostituisci i valori segnaposto con il tuo account di storage, il contenitore e i dettagli segreti, poi esegui per confermare se il token SAS può raggiungere l'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")
Test accesso all'endpoint blob
Se il test DFS ha successo ma la pipeline fallisce comunque, il connettore potrebbe usare invece l'endpoint blob. Il seguente snippet esegue la stessa lista, lettura e scrittura verifica sull'endpoint del blob:
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")
Se uno dei test restituisce un errore 403, il token SAS non ha i permessi necessari o non copre l'endpoint corretto. Verifica che il token SAS conceda almeno i permessi di Lettura e Lista sul container, e rigenerarlo se necessario.
Errori del certificato del server TLS
Per la risoluzione degli errori di convalida dei certificati del server TLS, vedere Risolvere gli errori dei certificati TLS.