Esta página descreve as práticas recomendadas para casos de uso em que:
- Os usuários têm uma tabela no BigQuery e precisam replicar os dados usando a captura de dados alterados (CDC) na mesma tabela do BigQuery.
- Os usuários precisam copiar dados para uma tabela do BigQuery sem usar o recurso de preenchimento do Datastream, seja pelo tempo que isso leva ou pelas limitações do produto.
Problema
Uma tabela do BigQuery que é preenchida usando a API BigQuery Storage Write não permite operações regulares de linguagem de manipulação de dados (DML). Isso significa que, quando um fluxo de CDC começa a gravar em uma tabela do BigQuery, não é possível adicionar dados históricos que não foram preenchidos previamente na tabela.
Pense no seguinte cenário:
- TIMESTAMP 1: a operação de cópia de tabela é iniciada.
- CARIMBO DE DATA/HORA 2: enquanto a tabela está sendo copiada, as operações DML na origem resultam em mudanças nos dados (as linhas são adicionadas, atualizadas ou removidas).
- TIMESTAMP 3: a CDC é iniciada, as mudanças que ocorreram em TIMESTAMP 2 não são capturadas, resultando em discrepância de dados.
Solução
Para garantir a integridade dos dados, o processo de CDC precisa capturar todas as mudanças na origem que ocorreram desde o momento imediatamente após a última atualização que foi copiada para a tabela do BigQuery.
A solução a seguir permite garantir que o processo de CDC capture todas as mudanças de TIMESTAMP 2, sem bloquear a operação de cópia de gravação de dados na tabela do BigQuery.
Pré-requisitos
- A tabela de destino no BigQuery precisa ter o mesmo esquema e configuração, como se ela tivesse sido criada pelo Datastream. Use o Datastream BigQuery Migration Toolkit para fazer isso.
- Para origens do MySQL e Oracle, o usuário precisa identificar a posição do registro no momento em que a operação de cópia é iniciada.
- O banco de dados precisa ter armazenamento e política de retenção de registros suficientes para que o processo de cópia de tabelas seja concluído.
Fontes do MySQL e Oracle
- Crie, mas não inicie o fluxo que você pretende usar para a replicação contínua do CDC. O stream precisa estar no estado CRIADO.
- Quando estiver tudo pronto para iniciar a operação de cópia de tabelas, identifique a posição de registro
atual do banco de dados:
- Para o MySQL, consulte a documentação do MySQL para saber como conseguir as coordenadas de registro binário da replicação. Depois de identificar a posição do registro, feche a sessão para liberar os bloqueios no banco de dados.
- Para o Oracle, execute a seguinte consulta:
SELECT current_scn FROM V$DATABASE
- Copie a tabela do banco de dados de origem para o BigQuery.
- Depois que a operação de cópia for concluída, siga as etapas descritas na página Gerenciar transmissões para iniciar a transmissão na posição de registro que você identificou anteriormente.
Origens do PostgreSQL
- Quando estiver tudo pronto para começar a copiar a tabela, crie o slot de replicação. Para mais informações, consulte Configurar um banco de dados PostgreSQL de origem.
- Copie a tabela do banco de dados de origem para o BigQuery.
- Quando a operação de cópia for concluída, crie e inicie a transmissão.