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:
- Crie, inicie e pause uma stream do Datastream com um destino do BigQuery.
- Execute a migração em cada tabela do BigQuery que precise de ser migrada.
- 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:
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
Crie a imagem:
docker build -t migration-service .
Autentique-se com as suas credenciais da CLI do Google Cloud:
docker run -ti \ --name gcloud-config migration-service gcloud auth application-default login
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
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.
Esvazie a stream de dados e o pipeline do Dataflow:
- Pause a stream de destino do Cloud Storage existente.
- 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.
- Esvazie a tarefa do Dataflow.
Execute a migração:
Execute a migração no modo
dry_run
. O mododry_run
permite-lhe gerar a declaração DDLCREATE 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.
Inspecione os ficheiros
.sql
emoutput/create_target_table
eoutput/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 {} \;
Para executar os comandos SQL, execute a migração no modo
full
. Ofull
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
Retomar a stream pausada.
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.