Datastream BigQuery Migration Toolkit


Esta página descreve as práticas recomendadas quando usa o Datastream para migrar do modelo do Dataflow Datastream para o BigQuery para a solução de replicação do BigQuery integrada no Datastream.

Antes de começar

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

  • Conhece e instalou o Docker.
  • Sabe como clonar repositórios de serviços como o GitHub.
  • Sabe como executar streams no Datastream.
  • Tem a CLI do Google Cloud instalada.

Vista geral do conjunto de ferramentas de migração

O Datastream BigQuery Migration Toolkit é um software de código aberto oferecido pela Google Cloud. O conjunto de ferramentas permite-lhe migrar a partir do modelo do Datastream para o BigQuery do Dataflow, mas também o pode usar quando migrar a partir de outros pipelines, conforme explicado na secção Migre a partir de outros pipelines que se segue.

Para migrar as tabelas do BigQuery através do conjunto de ferramentas, tem de seguir os seguintes passos:

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

O toolkit faz o seguinte:

  • Obtém o esquema da tabela de origem através da API Discover do Datastream.
  • Cria uma tabela do BigQuery compatível com o Datastream com base no esquema obtido.
  • Obtém o esquema da tabela do BigQuery a partir da qual está a fazer a migração para determinar as conversões de tipo de dados necessárias.
  • Copia todas as linhas existentes da tabela original para a nova tabela, incluindo as conversões do tipo de coluna adequadas.

Para mais informações sobre a forma como o conjunto de ferramentas está estruturado e os argumentos que usa, consulte o ficheiro README.md do conjunto de ferramentas.

Configure o conjunto de ferramentas de migração

Para executar o conjunto de ferramentas de migração através do Docker, siga estes passos:

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

    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. Autentique-se com as suas credenciais da CLI do Google Cloud:

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

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

    Substitua PROJECT_ID pelo identificador do seu Google Cloud projeto.

Migre do Dataflow para a solução integrada Datastream

  1. Crie uma stream de dados com um destino do BigQuery

  2. Inicie a stream e pause-a imediatamente. Isto permite que o fluxo de dados capture a posição a partir da qual captura alterações antes do início da migração.

  3. Esvazie a stream de dados e o pipeline do Dataflow:

    1. Pause a stream de destino do Cloud Storage existente.
    2. Verifique a métrica de latência total da stream e aguarde, pelo menos, o tempo da latência atual para garantir que todos os eventos em curso são escritos no destino.
    3. Esvazie a tarefa do Dataflow.
  4. Execute a migração:

    1. Execute a migração no modo dry_run. O modo dry_run permite-lhe gerar a declaração DDL CREATE TABLE e a declaração SQL para copiar dados, sem as executar:

      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 o seguinte:

      • PROJECT_ID: o identificador exclusivo do seu Google Cloud projeto.
      • STREAM_ID: o identificador exclusivo da stream de destino do BigQuery.
      • STREAM_REGION: a localização da sua 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 existente.
      • BIGQUERY_SOURCE_TABLE_NAME: o nome da tabela do BigQuery existente.
    2. Inspecione os ficheiros .sql em output/create_target_table e output/copy_rows. Estes são os comandos SQL que vão ser executados no seu Google Cloud projeto:

      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 full permite-lhe criar uma tabela no BigQuery e copiar todas as linhas da tabela do BigQuery 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 a stream pausada.

  6. Abra o Google Cloud Explorador de registos e procure registos de fluxo de dados com a seguinte consulta:

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

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

    Completed writing %d records into..
    

    Este registo indica que a nova stream carregou dados com êxito no BigQuery. Só é apresentado se existirem dados do CDC para carregar.

Migre de outros pipelines

O conjunto de ferramentas também lhe permite migrar de outros pipelines para a solução do BigQuery incorporada no Datastream. O conjunto de ferramentas pode gerar LDDs para tabelas do BigQuery compatíveis com o Datastream, com base no esquema da base de dados de origem, através do modo dry_run:CREATE TABLE

  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

Uma vez que os esquemas das tabelas do BigQuery podem variar, é difícil fornecer uma declaração SQL universal para copiar linhas. Pode 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 declaração SQL com conversões adequadas nas colunas de origem.

Segue-se um exemplo de um formato de declaração SQL que pode usar:

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

Substitua o seguinte:

  • DESTINATION_TABLE: o nome da 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 conjunto de ferramentas tem as seguintes limitações:

  • Os nomes das colunas nas tabelas do BigQuery existentes e novas têm de corresponder (ignorando as colunas de metadados). A migração falha se aplicar funções definidas pelo utilizador (UDFs) do Dataflow que alteram os nomes das colunas nas tabelas existentes (por exemplo, adicionando um prefixo ou alterando as letras maiúsculas/minúsculas).
  • As migrações entre regiões e projetos não são suportadas.
  • A migração funciona por tabela.
  • Apenas são suportadas origens Oracle e MySQL.