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:
- Crie, inicie e pause um fluxo do Datastream com um destino do BigQuery.
- Execute a migração em cada tabela do BigQuery que precisa ser migrada.
- 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:
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
Crie a imagem:
docker build -t migration-service .
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
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
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.
Drene o pipeline do Datastream e do Dataflow:
- Pause o fluxo de destino do Cloud Storage.
- 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.
- Drene o job do Dataflow.
Execute a migração:
Execute a migração no modo
dry_run
. O mododry_run
permite gerar a instrução DDLCREATE 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.
Inspecione os arquivos
.sql
emoutput/create_target_table
eoutput/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 {} \;
Para executar os comandos SQL, execute a migração no modo
full
. O modofull
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
Retomar o stream pausado.
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.