Este tópico descreve as capacidades e os detalhes de suporte da sincronização de dados do Databricks no DataWorks.
Observações de uso
-
Limitações
Grupo de recursos: O Databricks Reader oferece suporte apenas a grupos de recursos serverless. É necessário configurar um gateway NAT de Internet e um EIP para a VPC vinculada ao grupo de recursos.
Modo de leitura: A sincronização de dados permite ler dados exclusivamente no modo
JDBC.-
Limitações de tipo de catálogo e recursos: Ao testar a conectividade da fonte de dados ou configurar uma tarefa de sincronização no modo assistente, o DataWorks utiliza o
databricks-sdkpara chamar a API REST do Databricks, que oferece suporte apenas ao Unity Catalog. Caso o catálogo em uso (por exemplo,hive_metastore) não seja um Unity Catalog, esses recursos ficarão indisponíveis. Para prosseguir, adote uma das soluções abaixo:Solução 1 (recomendada): Migrar para o Unity Catalog. Seguindo a recomendação oficial do Databricks, migre seus dados e metadados para o Unity Catalog a fim de utilizar todos os recursos fornecidos pelo DataWorks. Para mais informações, consulte Migrar para o Unity Catalog.
Solução 2: Usar diretamente o modo script. Após configurar a fonte de dados no DataWorks, pule a etapa Test Connectivity e utilize o modo script diretamente ao configurar a tarefa de sincronização de dados.
-
Leituras simultâneas e consistência de dados
O Databricks Reader utiliza a configuração
splitPkpara fragmentar os dados e inicia múltiplas tarefas simultâneas, aumentando a eficiência da sincronização. Observe os pontos principais a seguir:As tarefas simultâneas não pertencem à mesma transação de banco de dados e há um intervalo de tempo entre elas.
Se houver gravações contínuas na fonte de dados, as leituras simultâneas podem gerar um snapshot de dados incompleto ou inconsistente.
Soluções: Devido a limitações técnicas, não é possível obter um snapshot perfeitamente consistente em várias threads. Duas abordagens de engenharia estão disponíveis. Escolha a que melhor se adapta ao seu cenário de negócios:
Solução 1: Configure a sincronização com thread única, sem definir uma chave de divisão (
splitPk). Isso garante consistência rigorosa dos dados, mas reduz a velocidade da sincronização.Solução 2: Garanta que a fonte de dados permaneça estática durante a sincronização. Por exemplo, bloqueie a tabela, desative temporariamente as gravações da aplicação ou pause a replicação em standby. Essa opção oferece uma sincronização mais rápida, mas pode impactar os serviços online.
-
Codificação
O Databricks Reader utiliza JDBC internamente para a extração de dados. O JDBC gerencia automaticamente a detecção e a conversão de codificação entre diferentes bancos de dados, eliminando a necessidade de configuração manual.
-
Sincronização incremental de dados
O Databricks Reader extrai dados executando instruções
SELECT ... WHERE .... O ponto fundamental da sincronização incremental reside na construção da cláusulaWHERE.-
Abordagem recomendada (baseada em uma coluna de timestamp):
Crie uma coluna de timestamp (por exemplo,
modify_time) na tabela do banco de dados de origem.Sempre que a aplicação inserir ou atualizar dados (incluindo exclusões lógicas), atualize também essa coluna de timestamp.
Na tarefa de sincronização, utilize essa coluna de timestamp na cláusula
WHEREpara buscar apenas os dados alterados desde o último ponto de sincronização.
Cenário não suportado: Se a tabela de negócios não possuir uma coluna capaz de distinguir inserções ou atualizações (como um timestamp ou ID autoincremental), o Databricks Reader não conseguirá realizar a sincronização incremental, restando apenas a opção de sincronização completa.
-
Tipos de coluna suportados
Para leituras em lote, o Databricks Reader aceita a maioria dos tipos do Databricks, embora alguns poucos não sejam suportados. Verifique seus tipos de dados com atenção.
A tabela a seguir apresenta o mapeamento de tipos realizado pelo Databricks Reader.
|
Categoria |
Tipo de dado do Databricks |
|
Inteiro |
TINYINT, SMALLINT, INT, BIGINT |
|
Ponto flutuante |
FLOAT, DOUBLE, DECIMAL |
|
String |
STRING |
|
Data e hora |
DATE, TIMESTAMP, TIMESTAMP_NTZ |
|
Booleano |
BOOLEAN |
|
Complexo |
ARRAY, MAP, STRUCT |
|
Outros |
INTERVAL, BINARY, GEOGRAPHY(srid), GEOMETRY(srid) |
Criar uma fonte de dados
Antes de desenvolver uma tarefa de sincronização de dados, crie a fonte de dados correspondente no DataWorks. Para o procedimento, consulte Gerenciamento de fontes de dados. Para descrições detalhadas dos parâmetros de configuração, verifique as dicas de ferramenta de cada parâmetro na página de configuração.
Desenvolver uma tarefa de sincronização de dados
Para acessar o ponto de entrada e conhecer o procedimento comum de configuração de uma tarefa de sincronização de dados, consulte os guias abaixo.
Guia de configuração para tarefa de sincronização em lote de tabela única
Para o procedimento, consulte Configurar uma tarefa de sincronização em lote no modo assistente e Configurar uma tarefa de sincronização em lote no modo script.
Para a lista completa de parâmetros e um exemplo de script para configuração no modo script, consulte o Apêndice: Exemplo de script e descrições de parâmetros abaixo.
Perguntas frequentes
-
P: Erro de leitura: [Databricks]JDBCDriver Error getting the data value from result set: Column13: [Databricks]JDBCDriver Error in fetching data rows: Timestamp Conversion has failed.
R: O intervalo de valores do tipo TIMESTAMP do Databricks excede o limite do tipo Timestamp do Java. Quando um valor fora do intervalo é encontrado, o driver JDBC reporta um erro. Para resolver, modifique a configuração de
column, por exemplo:"column": ["CAST(col_timestamp AS STRING)"].
Apêndice: Exemplo de script e descrições de parâmetros
Configuração no modo script para tarefas em lote
Ao configurar uma tarefa em lote no modo script, escreva os parâmetros necessários no script da tarefa seguindo o formato unificado. Para mais informações, consulte Configurar uma tarefa de sincronização em lote no modo script. A seção a seguir detalha a configuração de parâmetros da fonte de dados no modo script.
Exemplo de script do Reader
{
"type": "job",
"version": "2.0",
"steps": [
{
"stepType": "databricks",
"parameter": {
"datasource": "databricks",
"schema": "schema1",
"table": "table1",
"readMode": "jdbc",
"where": "id>1",
"splitPk": "id",
"column": [
"c1",
"c2"
]
},
"name": "Reader",
"category": "reader"
},
{
"stepType": "stream",
"parameter": {},
"name": "Writer",
"category": "writer"
}
],
"setting": {
"errorLimit": {
"record": "0"
},
"speed": {
"concurrent": 1
}
}
}
Parâmetros do script do Reader
|
Parâmetro |
Descrição |
Obrigatório |
Valor padrão |
|
datasource |
Nome da fonte de dados. O modo script permite adicionar fontes de dados. O valor deve corresponder exatamente ao nome da fonte de dados adicionada. |
Sim |
Nenhum |
|
column |
Conjunto de nomes de colunas a serem sincronizados na tabela configurada. Utilize um array JSON para descrever as informações das colunas.
Exemplo:
O campo column deve especificar explicitamente o conjunto de colunas a sincronizar e não pode estar vazio. |
Sim |
Nenhum |
|
splitPk |
Durante a extração de dados pelo Databricks Reader, especificar
|
Não |
Nenhum |
|
where |
Condição de filtro. O Databricks Reader concatena as cláusulas |
Não |
Nenhum |
|
schema |
Schema a ser sincronizado. |
Sim |
Nenhum |
|
table |
Tabela alvo da sincronização. Um único job suporta a sincronização de apenas uma tabela. |
Sim |
Nenhum |
|
readMode |
Modo de leitura dos dados. Atualmente, apenas o modo JDBC é suportado. |
Não |
jdbc |