Kit de ferramentas de migração do BigQuery para Datastream


Nesta página, descrevemos as práticas recomendadas ao usar o Datastream para migrar o modelo do Dataflow Datastream para BigQuery até a solução de replicação integrada do Datastream do BigQuery.

Antes de começar

As instruções nesta página pressupõem o seguinte:

  • Ter familiaridade com o Docker e instalar o serviço.
  • Você sabe como clonar repositórios de serviços como o GitHub.
  • Você sabe como executar streams no Datastream.
  • Você instalou a CLI do Google Cloud.

Visão geral do kit de ferramentas de migração

O Datastream BigQuery Migration Toolkit é uma ferramenta de código aberto que é oferecido pelo Google Cloud. O kit de ferramentas permite migrar do Dataflow do Datastream para o modelo do BigQuery, mas também pode ser usado ao migrar de outros pipelines, conforme explicado na seção Migrar de outros pipelines a seguir.

Para migrar suas tabelas do BigQuery usando o kit de ferramentas, você precisa realizar as seguintes etapas:

  1. Crie, inicie e pause um fluxo do Datastream com um destino do BigQuery.
  2. Execute a migração em cada tabela do BigQuery que precisa ser migrada.
  3. Retomar o stream.

O kit de ferramentas faz o seguinte:

  • Recupera o esquema da tabela de origem usando a API Discover do Datastream.
  • Cria uma tabela do BigQuery compatível com o Datastream com base no esquema recuperado.
  • Busca o esquema da tabela do BigQuery que você está migrando para determinar as conversões de tipo de dados necessárias.
  • Copia todas as linhas da tabela original para a nova, incluindo casts do tipo de coluna apropriado.

Para mais informações sobre a estrutura do kit de ferramentas e os argumentos que ele usa, consulte o arquivo README.md do kit de ferramentas.

Configurar o kit de ferramentas de migração

Para executar o kit de ferramentas de migração usando o Docker, siga estas etapas:

  1. Clone o repositório e mude para o diretório:

    git clone https://github.com/GoogleCloudPlatform/datastream-bigquery-migration-toolkit &&
    cd datastream-bigquery-migration-toolkit
    
  2. Crie a imagem:

    docker build -t migration-service .
    
  3. Faça a autenticação com suas credenciais da CLI do Google Cloud:

    docker run -ti \
    --name gcloud-config migration-service gcloud auth application-default login
    
  4. Defina a propriedade do projeto do Google Cloud:

    docker run -ti --volumes-from gcloud-config migration-service \
    gcloud config set project PROJECT_ID
    

    Substitua PROJECT_ID pelo identificador do seu projeto do Google Cloud.

Migrar do Dataflow para a solução integrada do Datastream

  1. Criar um fluxo do Datastream com um destino do BigQuery

  2. Inicie e pause o stream imediatamente. Isso permite que o Datastream capture a posição de onde as mudanças são capturadas antes do início da migração.

  3. Drene o pipeline do Datastream e do Dataflow:

    1. Pause o fluxo de destino do Cloud Storage.
    2. Verifique a métrica de latência total do fluxo e aguarde pelo menos o tempo da latência atual para garantir que todos os eventos em andamento sejam gravados no destino.
    3. Drene o job do Dataflow.
  4. Execute a migração:

    1. Execute a migração no modo dry_run. O modo dry_run permite gerar a instrução DDL CREATE TABLE e a instrução SQL para copiar dados, sem executá-los:

      docker run -v output:/output -ti --volumes-from gcloud-config \
      migration-service python3 ./migration/migrate_table.py dry_run \
      --project-id PROJECT_ID \
      --stream-id STREAM_ID \
      --datastream-region STREAM_REGION \
      --source-schema-name SOURCE_SCHEMA_NAME \
      --source-table-name SOURCE_TABLE_NAME \
      --bigquery-source-dataset-name BIGQUERY_SOURCE_DATASET_NAME \
      --bigquery-source-table-name BIGQUERY_SOURCE_TABLE_NAME
      

      Substitua:

      • PROJECT_ID: o identificador exclusivo da sua conta do Google Cloud projeto.
      • STREAM_ID: o identificador exclusivo do seu fluxo de destino do BigQuery.
      • STREAM_REGION: o local do stream, por exemplo, us-central1.
      • SOURCE_SCHEMA_NAME: o nome do esquema de origem.
      • SOURCE_TABLE_NAME: o nome da tabela de origem.
      • BIGQUERY_SOURCE_DATASET_NAME: o nome do conjunto de dados do BigQuery.
      • BIGQUERY_SOURCE_TABLE_NAME: o nome da tabela do BigQuery.
    2. Inspecione os arquivos .sql em output/create_target_table e output/copy_rows. Estes são os comandos SQL que serão executados no seu projeto do Google Cloud:

      docker run -v output:/output -ti migration-service find output/create_target_table \
      -type f -print -exec cat {} \;
      
      docker run -v output:/output -ti migration-service find output/copy_rows \
      -type f -print -exec cat {} \;
      
    3. Para executar os comandos SQL, execute a migração no modo full. O modo full permite criar uma tabela no BigQuery e copiar todas as linhas da tabela existente:

      docker run -v output:/output -ti --volumes-from gcloud-config \
      migration-service python3 ./migration/migrate_table.py full \
      --project-id PROJECT_ID \
      --stream-id STREAM_ID \
      --datastream-region STREAM_REGION \
      --source-schema-name SOURCE_SCHEMA_NAME \
      --source-table-name SOURCE_TABLE_NAME \
      --bigquery-source-dataset-name BIGQUERY_SOURCE_DATASET_NAME \
      --bigquery-source-table-name BIGQUERY_SOURCE_TABLE_NAME
      
  5. Retomar o stream pausado.

  6. Abra a Análise de registros do Google Cloud e procure os registros do Datastream pela seguinte consulta:

    resource.type="datastream.googleapis.com/Stream"
    resource.labels.stream_id=STREAM_ID
    

    Procure o seguinte registro, em que %d é um número:

    Completed writing %d records into..
    

    Esse registro indica que o novo stream carregou dados no BigQuery. Ele só aparece se houver dados do CDC para carregar.

Migrar de outros pipelines

O kit de ferramentas também permite migrar de outros pipelines para o Datastream integrada ao BigQuery. O kit de ferramentas pode gerar DDLs CREATE TABLE para tabelas do BigQuery compatíveis com o Datastream com base no esquema do banco de dados de origem usando o modo dry_run:

  docker run -v output:/output -ti --volumes-from gcloud-config \
  migration-service python3 ./migration/migrate_table.py dry_run \
  --project-id PROJECT_ID \
  --stream-id STREAM_ID \
  --datastream-region STREAM_REGION \
  --source-schema-name SOURCE_SCHEMA_NAME \
  --source-table-name SOURCE_TABLE_NAME \
  --bigquery-source-dataset-name BIGQUERY_SOURCE_DATASET_NAME \
  --bigquery-source-table-name BIGQUERY_SOURCE_TABLE_NAME

Como os esquemas da tabela do BigQuery podem variar, é difícil fornecer uma instrução SQL universal para copiar linhas. É possível usar os esquemas no diretório DDL da tabela de origem (output/source_table_ddl) e no diretório DDL da tabela de destino (output/create_target_table) para criar uma instrução SQL com casts apropriados nas colunas de origem.

Confira a seguir um exemplo de formato de instrução SQL que pode ser usado:

  INSERT INTO DESTINATION_TABLE (DESTINATION_COLUMN1, DESTINATION_COLUMN2...)
  SELECT SOURCE_COLUMN1, SOURCE_COLUMN2
  FROM SOURCE_TABLE;

Substitua:

  • DESTINATION_TABLE: o nome da sua tabela de destino no BigQuery.
  • DESTINATION_COLUMN: o nome da coluna na tabela de destino.
  • SOURCE_COLUMN: o nome da coluna na tabela de origem.
  • SOURCE_TABLE: o nome da tabela de origem.

Limitações

O toolkit tem as seguintes limitações:

  • Os nomes das colunas nas tabelas do BigQuery atuais e novas precisam ser iguais (ignorando as colunas de metadados). A migração falha se você aplicar funções definidas pelo usuário do Dataflow (UDFs) que mudam os nomes das colunas nas tabelas existentes, por exemplo, adicionando um prefixo ou mudando a caixa.
  • Não há suporte para migrações entre regiões e projetos.
  • A migração funciona por tabela.
  • Somente origens Oracle e MySQL são compatíveis.