Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Esta página descreve problemas comuns com o conector do Microsoft SQL Server no Databricks Lakeflow Connect e como resolvê-los.
Para orientações gerais sobre a resolução de problemas aplicáveis a todos os pipelines de ingestão geridos, veja Resolver problemas de pipelines de ingestão geridos.
Verificar se o CDC está habilitado para um banco de dados ou uma tabela
Para verificar se o CDC está habilitado para o banco de dados <database-name>:
select is_cdc_enabled from sys.databases where name='<database-name>';
Para verificar se o CDC está habilitado para a tabela <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>';
Verificar se o controlo de alterações está ativado para uma base de dados ou uma tabela
Para verificar se o controle de alterações está habilitado para o banco de dados\<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 verificar se o controlo de alterações está ativado para a tabela <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>'
Tempo limite de espera pelo token de mesa
O fluxo de ingestão pode ultrapassar o tempo limite enquanto aguarda que o gateway forneça as informações. Isto pode dever-se ao seguinte:
- Você está executando uma versão mais antiga do gateway.
- Houve um erro ao gerar as informações necessárias. Verifique se há erros nos logs do driver do gateway.
Observação
O fluxo completo de atualização reduz significativamente a ocorrência de erros de timeout durante operações completas de atualização. Ver comportamento completo de atualização (CDC).
Autenticação padrão: não é possível configurar credenciais padrão
Se você receber esse erro, há um problema com a descoberta das credenciais de usuário atuais. Tente substituir o seguinte:
w = WorkspaceClient()
Por:
w = WorkspaceClient(host=input('Databricks Workspace URL: '), token=input('Token: '))
Consulte Autenticação na documentação do Databricks SDK for Python.
tech.replicant.common.ExtractorException: com.microsoft.sqlserver.jdbc.SQLServerException: nome de coluna inválido 'SERIAL_NUMBER'.
Poderá receber este erro se estiver a utilizar uma versão mais antiga de uma tabela interna. Execute o seguinte no banco de dados conectado:
drop table dbo.replicate_io_audit_ddl_trigger_1;
PERMISSION_DENIED: Você não está autorizado a criar clusters. Contacte o seu administrador.
Entre em contato com um administrador de conta Databricks para conceder permissões Unrestricted cluster creation.
CÓDIGO DE ERRO DLT: ERRO INTERNO DO PORTAL DE INGESTÃO
Verifique os ficheiro(s) stdout nos registos do controlador.
Conflito de nomenclatura da tabela de origem
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.
Isso indica que há um conflito de nome devido a várias tabelas de origem nomeadas XYZ em esquemas de origem diferentes que estão a ser ingeridas pelo mesmo pipeline de ingestão num mesmo esquema de destino.
Crie múltiplos pares de gateway-pipeline, escrevendo essas tabelas conflitantes em diferentes esquemas de destino.
Alterações de esquema incompatíveis
Uma alteração de esquema incompatível faz com que o pipeline de ingestão falhe com um erro INCOMPATIBLE_SCHEMA_CHANGE. Para continuar a replicação, acione uma atualização completa das tabelas afetadas.
Observação
O Databricks não pode garantir que, no momento em que o pipeline de ingestão falhar devido a uma alteração de esquema incompatível, todas as linhas anteriores à alteração de esquema tenham sido ingeridas.
ALTERAÇÃO_DE_ESQUEMA_NÃO_INCREMENTAL
NON_INCREMENTAL_SCHEMA_CHANGE: Column '<column>' was added to table '<table>'. A full refresh is required to continue incremental ingestion.
Este erro ocorre quando uma nova coluna é adicionada a uma tabela de origem enquanto a ingestão incremental está ativa. O conector não pode preencher a nova coluna com valores a partir dos dados históricos de alterações, pelo que é necessária uma atualização completa.
Execute uma atualização completa da tabela afetada para retomar a ingestão. Veja Atualizar totalmente as tabelas de destino.
MISSING_TABLE_IN_SOURCE
MISSING_TABLE_IN_SOURCE: Table '<schema>.<table>' could not be found in the source database.
Este erro ocorre quando uma tabela que anteriormente estava disponível na base de dados de origem já não pode ser encontrada. As causas comuns incluem:
- A tabela foi renomeada ou eliminada na origem.
- A tabela está temporariamente indisponível, por exemplo, durante uma janela de manutenção.
Para resolver:
- Se a tabela estiver temporariamente indisponível, aguarde a conclusão da manutenção e, em seguida, volte a executar o pipeline.
- Se a tabela foi renomeada ou recriada, faça uma atualização completa da tabela afetada.
- Se a tabela foi eliminada intencionalmente, remova-a da canalização.
Erros HTTP 403 ao aceder ao armazenamento Azure
Se o seu pipeline falhar com um erro como INTERNAL_ERROR: Server returned HTTP response code: 403 for URL, o seu cálculo pode não ter acesso ao endpoint de armazenamento Azure usado pelo conector SQL Server.
Execute os seguintes testes num notebook Azure Databricks para isolar o problema. Use dbutils.secrets para recuperar o seu token de assinatura de acesso partilhado (SAS) em vez de o codificar fixamente.
Teste o acesso ao endpoint DFS (ADLS Gen2)
O snippet seguinte lista, lê e escreve no endpoint Gen2 do Azure Data Lake Storage (ADLS), também chamado de endpoint Distributed File System (DFS). Substitua os valores provisórios pelos detalhes da sua conta de armazenamento, contentor e secretos, depois execute-o para confirmar se o token SAS consegue chegar ao 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")
Teste o acesso ao endpoint do blob
Se o teste DFS resultar mas o teu pipeline continuar a falhar, o conector pode estar a usar o endpoint do blob. O seguinte snippet executa as mesmas verificações de lista, leitura e escrita contra o endpoint do 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 algum dos testes devolver um erro 403, o token SAS não tem as permissões necessárias ou não cobre o endpoint correto. Verifique se o token SAS concede pelo menos permissões de Leitura e Lista no contentor, e regenere-o se necessário.
Erros de certificado do servidor TLS
Para resolução de erros de validação de certificados do servidor TLS, veja Solucionar erros de certificados TLS.