Kit de herramientas de migración de BigQuery de Datastream


En esta página se describen las prácticas recomendadas para migrar de la plantilla de Dataflow Datastream a BigQuery a la solución de replicación de BigQuery integrada en Datastream.

Antes de empezar

En las instrucciones de esta página se presupone lo siguiente:

  • Conoces Docker y lo has instalado.
  • Sabes cómo clonar repositorios de servicios como GitHub.
  • Sabes cómo ejecutar flujos en Datastream.
  • Has instalado Google Cloud CLI.

Información general sobre el kit de herramientas de migración

Datastream BigQuery Migration Toolkit es un software de código abierto que ofrece Google Cloud. El kit de herramientas te permite migrar de la plantilla de Datastream a BigQuery de Dataflow, pero también puedes usarlo al migrar desde otras canalizaciones, como se explica en la sección Migrar desde otras canalizaciones que aparece más abajo.

Para migrar tus tablas de BigQuery con el kit de herramientas, debes seguir estos pasos:

  1. Crea, inicia y pausa una secuencia de Datastream con un destino de BigQuery.
  2. Ejecuta la migración en cada tabla de BigQuery que deba migrarse.
  3. Reanuda la emisión.

El kit de herramientas hace lo siguiente:

  • Obtiene el esquema de la tabla de origen mediante la API Discover de Datastream.
  • Crea una tabla de BigQuery compatible con Datastream basada en el esquema obtenido.
  • Obtiene el esquema de la tabla de BigQuery desde la que vas a migrar para determinar las conversiones de tipo de datos necesarias.
  • Copia todas las filas de la tabla original en la nueva, incluidas las conversiones de tipo de columna adecuadas.

Para obtener más información sobre la estructura del conjunto de herramientas y los argumentos que utiliza, consulta el archivo README.md del conjunto de herramientas.

Configurar el kit de herramientas de migración

Para ejecutar el kit de herramientas de migración con Docker, sigue estos pasos:

  1. Clona el repositorio y cambia al directorio:

    git clone https://github.com/GoogleCloudPlatform/datastream-bigquery-migration-toolkit &&
    cd datastream-bigquery-migration-toolkit
    
  2. Crea la imagen:

    docker build -t migration-service .
    
  3. Autentica con tus credenciales de Google Cloud CLI:

    docker run -ti \
    --name gcloud-config migration-service gcloud auth application-default login
    
  4. Defina la Google Cloud propiedad de proyecto:

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

    Sustituye PROJECT_ID por el identificador de tu Google Cloud proyecto.

Migrar de Dataflow a la solución integrada de Datastream

  1. Crea una secuencia de Datastream con un destino de BigQuery

  2. Inicia la emisión y pausa inmediatamente. De esta forma, Datastream puede capturar la posición desde la que captura los cambios antes de que empiece la migración.

  3. Drena el flujo de datos y el flujo de procesamiento de Dataflow:

    1. Pausa el flujo de destino de Cloud Storage.
    2. Comprueba la métrica de latencia total de la emisión y espera al menos el tiempo que indique la latencia actual para asegurarte de que los eventos en curso se escriben en el destino.
    3. Drena la tarea de Dataflow.
  4. Ejecuta la migración:

    1. Ejecuta la migración en modo dry_run. El modo dry_run te permite generar la instrucción CREATE TABLE DDL y la instrucción 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
      

      Haz los cambios siguientes:

      • PROJECT_ID: identificador único de tu Google Cloud proyecto.
      • STREAM_ID: identificador único de su flujo de destino de BigQuery.
      • STREAM_REGION: la ubicación de tu flujo, por ejemplo, us-central1.
      • SOURCE_SCHEMA_NAME: nombre del esquema de origen.
      • SOURCE_TABLE_NAME: el nombre de la tabla de origen.
      • BIGQUERY_SOURCE_DATASET_NAME: nombre del conjunto de datos de BigQuery.
      • BIGQUERY_SOURCE_TABLE_NAME: nombre de la tabla de BigQuery.
    2. Inspecciona los archivos .sql de output/create_target_table y output/copy_rows. Estos son los comandos SQL que se ejecutarán en tu Google Cloud proyecto:

      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 ejecutar los comandos SQL, ejecuta la migración en modo full. El modo full te permite crear una tabla en BigQuery y copiar todas las filas de la tabla de BigQuery que ya tengas:

      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. Reanuda el flujo pausado.

  6. Abre el Google Cloud Explorador de registros y busca registros de Datastream con la siguiente consulta:

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

    Busca el siguiente registro, donde %d es un número:

    Completed writing %d records into..
    

    Este registro indica que la nueva secuencia ha cargado correctamente los datos en BigQuery. Solo aparece si hay datos de CDC que cargar.

Migrar desde otras canalizaciones

El kit de herramientas también te permite migrar de otras canalizaciones a la solución de BigQuery integrada en Datastream. El kit de herramientas puede generar CREATE TABLEDDLs para tablas de BigQuery compatibles con Datastream, dry_run basándose en el esquema de la base de datos de origen mediante el modo 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

Como los esquemas de las tablas de BigQuery pueden variar, es difícil proporcionar una instrucción SQL universal para copiar filas. Puede usar los esquemas de los directorios DDL de la tabla de origen (output/source_table_ddl) y de la tabla de destino (output/create_target_table) para crear una instrucción SQL con las conversiones adecuadas en las columnas de origen.

A continuación, se muestra un ejemplo de formato de instrucción SQL que puede usar:

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

Haz los cambios siguientes:

  • DESTINATION_TABLE: el nombre de la tabla de destino en BigQuery.
  • DESTINATION_COLUMN: el nombre de la columna de la tabla de destino.
  • SOURCE_COLUMN: el nombre de la columna de la tabla de origen.
  • SOURCE_TABLE: 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 nuevas y las que ya existen deben coincidir (sin tener en cuenta las columnas de metadatos). La migración falla si aplicas funciones definidas por el usuario de Dataflow que cambian los nombres de las columnas de las tablas (por ejemplo, añadiendo un prefijo o cambiando las mayúsculas y minúsculas).
  • No se admiten las migraciones entre regiones ni entre proyectos.
  • La migración se realiza por tabla.
  • Solo se admiten fuentes de Oracle y MySQL.