Kit de herramientas de migración de BigQuery de Datastream


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

Antes de comenzar

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

  • Conoces y tienes instalado Docker.
  • Sabes cómo clonar repositorios de servicios como GitHub.
  • Sabes cómo ejecutar transmisiones en Datastream.
  • Instalaste Google Cloud CLI.

Descripción general del kit de herramientas de migración

El kit de herramientas de migración de Datastream a BigQuery 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 migras desde otras canalizaciones, como se explica en la siguiente sección Migra desde otras canalizaciones.

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

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

El kit de herramientas hace lo siguiente:

  • Recupera el esquema de la tabla de origen con la API de Discover de Datastream.
  • Crea una tabla de BigQuery compatible con Datastream en función del 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, incluidas las conversiones de tipo de columna adecuadas.

Para obtener más información sobre la estructura del 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:

  1. Clona el repositorio y cambia al directorio:

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

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

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

    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

  1. Crea una transmisión de Datastream con un destino de BigQuery

  2. Inicia la transmisión y, luego, pausa de inmediato. Esto permite que Datastream capture la posición desde la que captura los cambios antes de que comience la migración.

  3. Agota la canalización de Datastream y Dataflow:

    1. Detén la transmisión de destino existente de Cloud Storage.
    2. Verifica la métrica de latencia total de la transmisión y espera al menos el tiempo de la latencia actual para asegurarte de que los eventos en tránsito se escriban en el destino.
    3. Vacía el trabajo de Dataflow.
  4. Ejecuta la migración:

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

      Reemplaza lo siguiente:

      • PROJECT_ID: Es el identificador único de tu proyecto de Google Cloud.
      • STREAM_ID: Es el identificador único de tu flujo de destino de BigQuery.
      • STREAM_REGION: Es la ubicación de tu 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: Es el nombre del conjunto de datos de BigQuery existente.
      • BIGQUERY_SOURCE_TABLE_NAME: Es el nombre de la tabla de BigQuery existente.
    2. Inspecciona los archivos .sql en output/create_target_table y output/copy_rows. Estos son los comandos de SQL que se ejecutarán en tu proyecto de 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 {} \;
      
    3. Para ejecutar los comandos de SQL, ejecuta la migración en el modo full. El modo full te permite crear una tabla en BigQuery y copiar todas las filas de la tabla existente de BigQuery:

      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 la transmisión pausada.

  6. 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 nueva transmisión cargó correctamente los datos en BigQuery. Solo aparece si hay datos de CDC para cargar.

Migra desde otras canalizaciones

El kit de herramientas también te permite migrar de otras canalizaciones a la solución integrada de BigQuery de Datastream. El kit de herramientas puede generar DDL de CREATE TABLE para tablas de BigQuery compatibles con Datastream, según el esquema de la base de datos fuente, 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

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

A continuación, se muestra un ejemplo del formato de una 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: Es el nombre de la columna en la tabla de destino.
  • SOURCE_COLUMN: Es el nombre de la columna en tu tabla de origen.
  • SOURCE_TABLE: Es el nombre de tu tabla de origen.

Limitaciones

El kit de herramientas tiene las siguientes limitaciones:

  • Los nombres de las columnas en 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 de Dataflow (UDF) que cambian los nombres de las columnas en las tablas existentes (por ejemplo, agregando un prefijo o cambiando el uso de mayúsculas y minúsculas).
  • No se admiten las migraciones entre regiones ni entre proyectos.
  • La migración funciona por tabla.
  • Solo se admiten las fuentes de Oracle y MySQL.