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 seus dados usando a captura de dados alterados (CDC) na mesma tabela do BigQuery.
- Os usuários precisam copiar os dados para uma tabela atual do BigQuery sem usar o recurso de preenchimento do Datastream, seja pelo tempo que levaria ou por limitações do produto.
"Problem" (Problema)
Uma tabela do BigQuery preenchida usando a API BigQuery Storage Write não permite operações regulares de linguagem de manipulação de dados (DML, na sigla em inglês). Isso significa que, uma vez que um fluxo de CDC começa a gravar em uma tabela do BigQuery, não há como adicionar dados históricos que ainda não foram pré-preenchidos na tabela.
Pense no seguinte cenário:
- CARIMBO DE DATA/HORA 1: a operação de cópia da tabela é iniciada.
- TIMESTAMP 2: enquanto a tabela está sendo copiada, as operações DML na origem resultam em alterações nos dados (linhas são adicionadas, atualizadas ou removidas).
- CARIMBO DE DATA/HORA 3: o CDC é iniciado, as mudanças que ocorreram no CARIMBO DE DATA/HORA 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 alterações na origem que ocorreram desde o momento imediatamente após a última atualização feita que foi copiada na tabela do BigQuery.
A solução a seguir permite garantir que o processo de CDC capture todas as alterações do CARIMBO DE DATA/HORA 2, sem impedir que a operação de cópia grave dados na tabela do BigQuery.
Pré-requisitos
- A tabela de destino no BigQuery precisa ter exatamente o mesmo esquema e configuração de uma tabela criada pelo Datastream. Você pode usar o Kit de ferramentas de migração do Datastream para o BigQuery para fazer isso.
- Para origens MySQL e Oracle, o usuário precisa conseguir identificar a posição do registro no momento em que a operação de cópia é iniciada.
- O banco de dados precisa ter armazenamento suficiente e política de retenção de registros para permitir que o processo de cópia da tabela seja concluído.
Origens do MySQL e do Oracle
- Crie, mas não inicie o stream que você pretende usar para a replicação de CDC em andamento. O stream precisa estar no estado CREATED.
- Quando estiver tudo pronto para iniciar a operação de cópia da tabela, identifique a posição atual do registro do banco de dados:
- Para o MySQL, consulte a documentação do MySQL para saber como conseguir as coordenadas do registro binário de replicação. Depois de identificar a posição do registro, feche a sessão para liberar todos os bloqueios no banco de dados.
- Para 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 streams para iniciar o stream 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.
- Após a conclusão da operação de cópia, crie e inicie o stream.