Este documento explica o funcionamento da sincronização de dados no Data Integration e auxilia na avaliação dos resultados das tarefas, como volume de dados e contagem de registros no destino. Além disso, apresenta cenários comuns de qualidade de dados e fornece soluções para resolvê-los.
Como funciona
O dataworks Data Integration utiliza uma arquitetura baseada em processamento paralelo e plugins para garantir uma sincronização de dados eficiente e estável.
Modelo de execução paralela (job e task)
Para maximizar o throughput de dados, uma tarefa de sincronização adota uma estrutura de execução em dois níveis:
Job: Uma instância em execução de uma tarefa de sincronização.
Task: A menor unidade de execução de um job. Um job é dividido em múltiplas tasks que podem ser executadas simultaneamente em uma ou mais máquinas.
Cada task processa um shard de dados independente. Esse mecanismo de processamento paralelo melhora significativamente a eficiência geral da sincronização de dados.
Fluxo de dados baseado em plugins (reader e writer)
Dentro de cada task, o fluxo de dados é orquestrado por um plugin reader e um plugin writer, conectados por um buffer em memória:
Plugin reader: Conecta-se ao armazenamento de dados source, lê os dados e os envia para o buffer interno.
Plugin writer: Consome dados do buffer e os grava no armazenamento de dados de destino.
Os plugins reader e writer seguem rigorosamente os protocolos e restrições nativos, como tipos de dados e restrições de chave primária, de suas respectivas fontes de dados. Portanto, o comportamento final da sincronização e a consistência dos dados dependem da implementação dos sistemas source e de destino.
Solucionar problemas de consistência de dados no lado do writer
O plugin writer do Data Integration grava dados da source para o destino. Cada tipo de fonte de dados de destino possui um plugin writer correspondente. O plugin writer envia dados ao destino usando JDBC ou o SDK da fonte de dados, com base no modo de gravação configurado, incluindo estratégias de resolução de conflitos.
Os resultados reais de gravação e o conteúdo dos dados no destino dependem do modo de gravação e das restrições da tabela de destino.
Caso enfrente problemas de qualidade de dados, como contagem de registros ou conteúdo dos dados, após a conclusão de uma tarefa de sincronização, revise os seguintes problemas comuns relacionados ao writer.
|
Causa |
Descrição |
Solução |
|
|
Modo de gravação configurado incorretamente |
O plugin writer grava os dados da source no destino usando o modo de gravação selecionado. Se os dados da source entrarem em conflito com as restrições da tabela de destino, isso pode resultar em falhas de inserção (dirty data), descartes silenciosos ou substituição de registros. |
Selecione o modo de gravação correto para o seu caso de uso. Para obter mais informações, consulte Appendix: Write modes for relational databases. |
|
|
Limiar de dirty data atingido |
A quantidade de dirty data, causada por problemas como incompatibilidade de tipos de dados ou conteúdo excessivamente grande, excede o limiar configurado. Isso faz com que a tarefa falhe e impede que alguns dados sejam gravados. |
Identifique a causa da dirty data e resolva o problema. Alternativamente, determine se a dirty data pode ser tolerada e ignorada. Nota
Se sua tarefa não puder tolerar dirty data, modifique o limiar de dirty data em . Para obter mais informações sobre como configurar o limiar de dirty data, consulte codeless UI configuration. Para saber mais sobre o que constitui dirty data, consulte Data Integration. |
|
|
Consulta de dados prematura |
Os dados são consultados antes da conclusão da tarefa de sincronização. Em algumas fontes de dados, como Hive e MaxCompute (configurável), os dados podem ficar parcial ou totalmente indisponíveis até que a tarefa termine. |
Sempre verifique os dados na tabela de destino após confirmar que a instância da tarefa de sincronização foi executada com sucesso. |
|
|
Dependência de nó ausente |
Se nenhuma dependência explícita de Grafo Acíclico Direcionado (DAG) for configurada entre uma tarefa de análise downstream e uma tarefa de sincronização upstream, a tarefa downstream poderá iniciar prematuramente e ler dados incompletos. |
No DataStudio, configure uma dependência explícita de nó pai-filho entre as tarefas upstream e downstream. Evite usar dependências fracas, como |
|
|
Múltiplas tarefas de sincronização gravando na mesma tabela ou partição simultaneamente, causando interferência. |
Execução simultânea insegura de tarefas de sincronização.
|
|
|
|
Tarefa não configurada para execução idempotente |
A tarefa não é idempotente, o que significa que execuções múltiplas produzem resultados diferentes. Reexecutar a tarefa pode causar a inserção de dados duplicados ou a sobrescrita incorreta de dados. |
1. Sempre que possível, projete a tarefa para ser idempotente. Por exemplo, use o modo |
|
|
Expressão de partição incorreta |
No MaxCompute, a maioria das tabelas de dados é particionada, e os valores de partição costumam ser parâmetros de agendamento do dataworks, como $bizdate. Erros comuns incluem:
|
Verifique as expressões de variáveis na tarefa de sincronização de dados. Confirme se a configuração do parâmetro de agendamento está correta e se os parâmetros de tempo de execução na instância da tarefa avaliam para os valores esperados. |
|
|
Incompatibilidade de tipo de dados ou fuso horário |
Tipos de dados ou configurações de fuso horário inconsistentes entre a source e o destino podem causar truncamento de dados, conversão incorreta ou discrepâncias durante comparações. |
|
|
|
Dados de destino alterados por outros processos |
Se outros aplicativos modificarem a fonte de dados de destino simultaneamente, seu conteúdo poderá ficar inconsistente com os dados da source. |
Garanta que nenhum outro processo grave na tabela de destino durante a janela de sincronização. Se gravações simultâneas forem um comportamento esperado, você deve aceitar as discrepâncias de dados resultantes. |
|
Apêndice: Modos de gravação para bancos de dados relacionais
|
Tipo de protocolo |
Modo de gravação |
Comportamento em caso de conflito |
Comportamento sem conflito |
Quando usar |
|
Protocolo Geral/MySQL |
|
A inserção falha e gera dirty data. |
Insere novos dados. |
Anexar dados para sincronização completa ou incremental sem sobrescrever ou modificar registros existentes. |
|
|
Substitui a linha antiga excluindo-a primeiro e depois inserindo a nova linha. |
Insere novos dados. |
Sobrescrever completamente registros antigos com os dados mais recentes. |
|
|
|
Atualiza a linha antiga modificando apenas campos especificados com novos dados. |
Insere novos dados. |
Atualizar campos específicos em um registro enquanto preserva outros, como um timestamp de criação. |
|
|
|
Ignora a nova linha sem gravá-la ou gerar um erro. |
Insere novos dados. |
Inserir apenas dados que ainda não existem e não realizar nenhuma ação em registros existentes. |
|
|
PostgreSQL |
|
Ignora a nova linha sem gravá-la ou gerar um erro. |
Insere novos dados. |
Inserir apenas dados que ainda não existem e não realizar nenhuma ação em registros existentes. |
|
|
Atualiza a linha antiga modificando campos especificados na linha conflitante com novos dados. |
Insere novos dados. |
Atualizar campos específicos em um registro enquanto preserva outros, como um timestamp de criação. |
|
|
|
Descarta linhas conflitantes. Usa o protocolo |
Insere novos dados em massa. |
Anexar grandes lotes de dados de forma eficiente, permitindo que registros duplicados sejam ignorados. |
|
|
|
Atualiza linhas conflitantes. Usa o protocolo |
Insere novos dados em massa. |
Sincronizar grandes lotes de dados de forma eficiente, sobrescrevendo registros antigos com os dados mais recentes. |
|
|
- |
|
Não suportado. |
||
Solucionar problemas de consistência de dados no lado do reader
O plugin reader do Data Integration conecta-se ao armazenamento de dados source, extrai os dados e os entrega ao plugin writer. Cada tipo de fonte de dados source possui um plugin reader correspondente. O plugin usa JDBC ou o SDK da fonte de dados para extrair dados com base no modo de extração configurado, que pode incluir filtros, tabelas, partições e colunas.
Os resultados reais de leitura dependem do mecanismo de sincronização de dados, das alterações nos dados da source e da configuração da tarefa.
Caso enfrente problemas de qualidade de dados, como contagem de registros ou conteúdo dos dados, após a conclusão de uma tarefa de sincronização, revise os seguintes problemas comuns relacionados ao reader.
|
Causa |
Descrição |
Solução |
|
Alterações simultâneas nos dados da source |
|
Aceite esse comportamento como um resultado esperado da sincronização de dados de alto throughput. Reexecutar a tarefa pode produzir resultados diferentes devido a alterações em tempo real nos dados da source. |
|
Condições de filtro incorretas |
|
Verifique as expressões de variáveis de agendamento na tarefa de sincronização de dados. Confirme se a configuração do parâmetro de agendamento está correta e se os valores dos parâmetros são substituídos conforme esperado em tempo de execução. |
|
Dirty data no lado do reader |
Ocorre uma falha de análise ao ler dados da source. Isso é raro em bancos de dados estruturados, mas pode acontecer com fontes de dados semiestruturadas, como arquivos CSV ou JSON no oss. Erros de formato podem fazer com que alguns registros sejam ignorados. |
|
Solucionar problemas de ambiente
|
Causa |
Solução |
|
Consulta à fonte de dados, tabela ou partição errada |
|
|
Dependências upstream não atendidas |
Se os dados forem gerados periodicamente, como por uma tarefa recorrente de sincronização ou mesclagem de dados, garanta que as tarefas upstream que geram esses dados tenham sido executadas e concluídas com sucesso. |
Como etapa geral de solução de problemas, execute a tarefa várias vezes para observar e comparar os resultados da sincronização. Você também pode tentar alternar a fonte de dados source ou de destino para testes comparativos. Esses testes ajudam a restringir o problema.