En esta página, se describen las prácticas recomendadas para usar Datastream cuando se migra de la plantilla de Dataflow Datastream a BigQuery a la solución de replicación de BigQuery integrada en Datastream.
Antes de comenzar
En las instrucciones de esta página, se supone lo siguiente:
- Estás familiarizado con Docker y lo instalaste.
- Sabes cómo clonar repositorios de servicios como GitHub.
- Ya sabes cómo ejecutar flujos en Datastream.
- Instalaste Google Cloud CLI.
Descripción general del kit de herramientas de migración
El kit de herramientas de migración de BigQuery de Datastream es un software de código abierto que ofrece Google Cloud. El kit de herramientas te permite migrar desde la plantilla de Datastream a BigQuery de Dataflow, pero también puedes usarlo cuando migres desde otras canalizaciones, como se explica en la siguiente sección Cómo migrar desde otras canalizaciones.
Para migrar tus tablas de BigQuery con el kit de herramientas, debes realizar los siguientes pasos:
- Crea, inicia y pausa una transmisión de Datastream con un destino de BigQuery.
- Ejecuta la migración en cada tabla de BigQuery que se deba migrar.
- Reanuda la transmisión.
El kit de herramientas hace lo siguiente:
- Recupera el esquema de la tabla de origen con la API de descubrimiento de Datastream.
- Crea una tabla de BigQuery compatible con Datastream según el esquema recuperado.
- Recupera el esquema de la tabla de BigQuery desde la que migras para determinar las conversiones de tipos de datos necesarias.
- Copia todas las filas existentes de la tabla original a la tabla nueva, incluidos los conversión de tipo de columna adecuados.
Para obtener más información sobre la forma en que se estructura el kit de herramientas y los argumentos que usa, consulta el archivo README.md
del kit de herramientas.
Configura el kit de herramientas de migración
Para ejecutar el kit de herramientas de migración con Docker, sigue estos pasos:
Clona el repositorio y cambia de directorio:
git clone https://github.com/GoogleCloudPlatform/datastream-bigquery-migration-toolkit && cd datastream-bigquery-migration-toolkit
Compila la imagen:
docker build -t migration-service .
Autentica con tus credenciales de Google Cloud CLI:
docker run -ti \ --name gcloud-config migration-service gcloud auth application-default login
Establece la propiedad Google Cloud del proyecto:
docker run -ti --volumes-from gcloud-config migration-service \ gcloud config set project PROJECT_ID
Reemplaza PROJECT_ID por el identificador de tu proyecto Google Cloud.
Migra de Dataflow a la solución integrada de Datastream
Inicia la transmisión y páusala de inmediato. Esto permite que Datastream capte la posición desde la que captura los cambios antes de que comience la migración.
Drena la canalización de Datastream y Dataflow:
- Detén la transmisión de destino existente de Cloud Storage.
- Verifica la métrica de latencia total de la transmisión y espera al menos el tiempo de latencia actual para asegurarte de que los eventos en curso se escriban en el destino.
- Vacía el trabajo de Dataflow.
Ejecuta la migración:
Ejecuta la migración en el modo
dry_run
. El mododry_run
te permite generar la instrucción DDLCREATE TABLE
y la instrucción de SQL para copiar datos sin ejecutarlas: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
Reemplaza lo siguiente:
- PROJECT_ID: Es el identificador único de tu Google Cloud proyecto.
- STREAM_ID: Es el identificador único de tu flujo de destino de BigQuery.
- STREAM_REGION: Es la ubicación de la transmisión, por ejemplo,
us-central1
. - SOURCE_SCHEMA_NAME: Es el nombre del esquema de origen.
- SOURCE_TABLE_NAME es el nombre de la tabla de origen.
- BIGQUERY_SOURCE_DATASET_NAME: El nombre del conjunto de datos de BigQuery existente.
- BIGQUERY_SOURCE_TABLE_NAME: Es el nombre de la tabla de BigQuery existente.
Inspecciona los archivos
.sql
enoutput/create_target_table
youtput/copy_rows
. Estos son los comandos de SQL que se ejecutarán en tu proyecto 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 ejecutar los comandos de SQL, ejecuta la migración en el modo
full
. El modofull
te permite crear una tabla en BigQuery y copiar todas las filas de la tabla de 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
Reanuda la transmisión pausada.
Abre el Google Cloud Explorador de registros y busca los registros de Datastream con la siguiente consulta:
resource.type="datastream.googleapis.com/Stream" resource.labels.stream_id=STREAM_ID
Busca el siguiente registro, en el que
%d
es un número:Completed writing %d records into..
Este registro indica que la transmisión nueva cargó datos correctamente en BigQuery. Solo aparece si hay datos de CDC para cargar.
Migra desde otras canalizaciones
El kit de herramientas también te permite migrar desde otras canalizaciones a la solución integrada de BigQuery de Datastream.
El kit de herramientas puede generar DDL CREATE TABLE
para tablas de BigQuery compatibles con Datastream, según el esquema de la base de datos de origen, con el 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
Debido a que los esquemas de las tablas de BigQuery pueden variar, es difícil proporcionar una instrucción de SQL universal para copiar filas. Puedes usar los esquemas del directorio DDL de la tabla fuente (output/source_table_ddl
) y del directorio DDL de la tabla de destino (output/create_target_table
) para crear una instrucción de SQL con conversiones adecuadas en las columnas de origen.
El siguiente es un ejemplo de formato de instrucción de SQL que puedes usar:
INSERT INTO DESTINATION_TABLE (DESTINATION_COLUMN1, DESTINATION_COLUMN2...)
SELECT SOURCE_COLUMN1, SOURCE_COLUMN2
FROM SOURCE_TABLE;
Reemplaza lo siguiente:
- DESTINATION_TABLE: Es el nombre de la tabla de destino en BigQuery.
- DESTINATION_COLUMN: El nombre de la columna en la tabla de destino.
- SOURCE_COLUMN: Es el nombre de la columna en la tabla de origen.
- SOURCE_TABLE: Es el nombre de la tabla de origen.
Limitaciones
El kit de herramientas tiene las siguientes limitaciones:
- Los nombres de las columnas de las tablas de BigQuery existentes y nuevas deben coincidir (sin tener en cuenta las columnas de metadatos). La migración falla si aplicas funciones definidas por el usuario (UDF) de Dataflow que cambian los nombres de las columnas en las tablas existentes (por ejemplo, añadiendo un prefijo o cambiando el caso).
- No se admiten las migraciones entre regiones ni entre proyectos.
- La migración funciona por tabla.
- Solo se admiten fuentes de Oracle y MySQL.