Kit de herramientas de migración de BigQuery de Datastream


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.
  • Debes saber cómo clonar repositorios desde servicios como GitHub.
  • Debes saber 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 BigQuery de Datastream es un software de código abierto que ofrece Google Cloud. El kit de herramientas te permite migrar de Dataflow Plantilla de Datastream a BigQuery, pero también puedes usarlo cuando migres desde otras canalizaciones, como se explica en el Sección Migra desde otras canalizaciones a continuación.

Para migrar tus tablas de BigQuery con el kit de herramientas, debes realizar los siguientes 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 se deba migrar.
  3. Reanuda la transmisión.

El kit de herramientas hace lo siguiente:

  • Recupera el esquema de la tabla de origen con Datastream. API de Descubre.
  • Crea una tabla de BigQuery compatible con Datastream basada en el esquema recuperado.
  • Recupera el esquema de la tabla de BigQuery desde la que realizas la migración. para determinar las conversiones necesarias de tipos de datos.
  • 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 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 el directorio a él:

    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. Autentica 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 de 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 de Google Cloud.

Migra de Dataflow a la solución integrada de Datastream

  1. Crea un flujo de Datastream con un destino de BigQuery

  2. 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.

  3. Drena 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 latencia actual para asegurarte de que los eventos en curso se escriban en el destino.
    3. Vacía el trabajo 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 de DDL CREATE 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 proyecto de Google Cloud.
      • STREAM_ID: Es el identificador único de tu BigQuery. transmisión de destino.
      • 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: Es el nombre del archivo de BigQuery existente. de tu conjunto de datos.
      • 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 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 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
      
  5. Reanuda la transmisión pausada.

  6. Abre el Explorador de registros de Google Cloud 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 el flujo nuevo cargó datos correctamente en BigQuery. Solo aparece si hay datos de CDC para cargar.

Cómo migrar 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 SQL universal para copiar filas. Puedes usar los esquemas en la fuente directorio de DDL de la tabla (output/source_table_ddl) y el DDL de la tabla de destino (output/create_target_table) para crear una instrucción de SQL con transmisiones en la fuente columnas.

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 tu 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 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 columna en las tablas de BigQuery existentes y nuevas deben coincidir (ignorando 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 la mayúscula o minúscula).
  • No se admiten las migraciones entre regiones ni entre proyectos.
  • La migración funciona por tabla.
  • Solo se admiten fuentes de Oracle y MySQL.