Usar o Datastream com uma tabela atual do BigQuery

Quando um backfill padrão do Datastream leva muito tempo ou tem limitações de produto, é possível copiar os dados iniciais em uma tabela do BigQuery separadamente. O streaming de atualizações de captura de dados alterados (CDC) para o BigQuery de uma posição de registro específica permite manter a tabela sincronizada sem executar um backfill integrado.

Problema

Uma tabela do BigQuery preenchida usando a API BigQuery Storage Write não permite operações normais de linguagem de manipulação de dados (DML). Isso significa que, depois que um stream de CDC começa a gravar em uma tabela do BigQuery, não é possível adicionar dados históricos que ainda não foram pré-preenchidos na tabela.

Pense no seguinte cenário:

  1. CARIMBO DE DATA/HORA 1: a operação de cópia da tabela é iniciada.
  2. CARIMBO DE DATA/HORA 2: enquanto a tabela está sendo copiada, as operações de DML na origem resultam em mudanças nos dados (linhas são adicionadas, atualizadas ou removidas).
  3. CARIMBO DE DATA/HORA 3: o CDC é iniciado, mas as mudanças que ocorreram durante CARIMBO DE DATA/HORA 2 não são capturadas, resultando em uma discrepância de dados.

Solução

Para garantir a integridade de dados, o processo de CDC precisa capturar todas as mudanças na origem que ocorreram a partir do momento imediatamente após a última atualização feita 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 do CARIMBO DE DATA/HORA 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 tivesse sido criada pelo Datastream. É possível usar o Datastream BigQuery Migration Toolkit para fazer isso.
  • Para origens do MySQL e do Oracle, é necessário 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 uma política de retenção de registros adequada para permitir que o processo de cópia da tabela seja concluído.

Origens do MySQL e do Oracle

  1. Crie, mas não inicie o stream que você pretende usar para a replicação contínua do CDC. O stream precisa estar no estado CRIADO.
  2. 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 receber 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 o Oracle, execute a seguinte consulta: SELECT current_scn FROM V$DATABASE.
  3. Copie a tabela do banco de dados de origem para o BigQuery.
  4. Após a conclusão da operação de cópia, siga as etapas descritas na página Gerenciar streams para iniciar o stream da posição do registro que você identificou anteriormente.

Origens do PostgreSQL

  1. 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 de origem do PostgreSQL.
  2. Copie a tabela do banco de dados de origem para o BigQuery.
  3. Após a conclusão da operação de cópia, crie e inicie o stream.