Kit d'outils de migration Datastream vers BigQuery


Cette page décrit les bonnes pratiques à suivre lorsque vous utilisez Datastream pour migrer du modèle Dataflow Datastream vers BigQuery vers la solution de réplication BigQuery intégrée à Datastream.

Avant de commencer

Les instructions figurant sur cette page présupposent ce qui suit :

  • Vous connaissez Docker et vous l'avez installé.
  • Vous savez cloner des dépôts à partir de services tels que GitHub.
  • Vous savez exécuter des flux dans Datastream.
  • Vous avez installé la Google Cloud CLI.

Présentation de la boîte à outils de migration

Le kit d'outils de migration BigQuery Datastream est un logiciel Open Source proposé par Google Cloud. La boîte à outils vous permet de migrer depuis le modèle Datastream vers BigQuery de Dataflow, mais vous pouvez également l'utiliser lors de la migration depuis d'autres pipelines, comme expliqué dans la section Migrer depuis d'autres pipelines qui suit.

Pour migrer vos tables BigQuery à l'aide de la boîte à outils, procédez comme suit:

  1. Créez, démarrez et mettez en pause un flux Datastream avec une destination BigQuery.
  2. Exécutez la migration sur chaque table BigQuery à migrer.
  3. Relancez le flux.

Le kit d'outils effectue les opérations suivantes:

  • Récupère le schéma de la table source à l'aide de l'API de découverte Datastream.
  • Crée une table BigQuery compatible avec Datastream en fonction du schéma récupéré.
  • Récupère le schéma de la table BigQuery à partir de laquelle vous effectuez la migration pour déterminer les conversions de types de données nécessaires.
  • Copier toutes les lignes existantes de la table d'origine vers la nouvelle table, y compris les casts de type de colonne appropriés.

Pour en savoir plus sur la structure du kit d'outils et les arguments qu'il utilise, consultez le fichier README.md du kit d'outils.

Configurer l'outil de migration

Pour exécuter le kit d'outils de migration à l'aide de Docker, procédez comme suit:

  1. Clonez le dépôt et accédez-y:

    git clone https://github.com/GoogleCloudPlatform/datastream-bigquery-migration-toolkit &&
    cd datastream-bigquery-migration-toolkit
    
  2. Créez l'image comme suit :

    docker build -t migration-service .
    
  3. Authentifiez-vous avec vos identifiants Google Cloud CLI:

    docker run -ti \
    --name gcloud-config migration-service gcloud auth application-default login
    
  4. Définissez la propriété de votre projet Google Cloud :

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

    Remplacez PROJECT_ID par l'identifiant de votre Google CloudProjet.

Migrer de Dataflow vers la solution intégrée Datastream

  1. Créer un flux Datastream avec une destination BigQuery

  2. Démarrez la diffusion, puis mettez-la immédiatement en pause. Cela permet à Datastream de capturer la position à partir de laquelle il capture les modifications avant le début de la migration.

  3. Videz le pipeline Datastream et Dataflow:

    1. Mettez en veille le flux de destination Cloud Storage existant.
    2. Vérifiez la métrique de latence totale pour le flux et attendez au moins aussi longtemps que la latence actuelle pour vous assurer que tous les événements en cours d'exécution sont écrits à la destination.
    3. Vider la tâche Dataflow
  4. Exécutez la migration :

    1. Exécutez la migration en mode dry_run. Le mode dry_run vous permet de générer l'instruction LDD CREATE TABLE et l'instruction SQL pour copier des données, sans les exécuter:

      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
      

      Remplacez les éléments suivants :

      • PROJECT_ID: identifiant unique de votre Google Cloud projet.
      • STREAM_ID: identifiant unique de votre flux de destination BigQuery.
      • STREAM_REGION: emplacement de votre flux (par exemple, us-central1).
      • SOURCE_SCHEMA_NAME: nom du schéma source.
      • SOURCE_TABLE_NAME : nom de la table source.
      • BIGQUERY_SOURCE_DATASET_NAME: nom de l'ensemble de données BigQuery existant.
      • BIGQUERY_SOURCE_TABLE_NAME: nom de la table BigQuery existante.
    2. Inspectez les fichiers .sql sous output/create_target_table et output/copy_rows. Voici les commandes SQL qui seront exécutées dans votre projet 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. Pour exécuter les commandes SQL, exécutez la migration en mode full. Le mode full vous permet de créer une table dans BigQuery et de copier toutes les lignes de la table BigQuery existante:

      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. Relancez le flux mis en pause.

  6. Ouvrez l' Google Cloud explorateur de journaux et recherchez les journaux Datastream avec la requête suivante:

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

    Recherchez le journal suivant, où %d est un nombre:

    Completed writing %d records into..
    

    Ce journal indique que le nouveau flux a bien chargé des données dans BigQuery. Il ne s'affiche que si des données CDC doivent être chargées.

Migrer depuis d'autres pipelines

La boîte à outils vous permet également de migrer d'autres pipelines vers la solution BigQuery intégrée Datastream. L'outil peut générer des DDL CREATE TABLE pour les tables BigQuery compatibles avec Datastream, en fonction du schéma de la base de données source à l'aide du mode 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

Étant donné que les schémas de table BigQuery peuvent varier, il est difficile de fournir une instruction SQL universelle pour copier des lignes. Vous pouvez utiliser les schémas du répertoire LDD de la table source (output/source_table_ddl) et du répertoire LDD de la table de destination (output/create_target_table) pour créer une instruction SQL avec des casts appropriés sur les colonnes sources.

Voici un exemple de format d'instruction SQL que vous pouvez utiliser:

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

Remplacez les éléments suivants :

  • DESTINATION_TABLE: nom de votre table de destination dans BigQuery.
  • DESTINATION_COLUMN: nom de la colonne de votre table de destination.
  • SOURCE_COLUMN: nom de la colonne de votre table source.
  • SOURCE_TABLE: nom de votre table source.

Limites

Le kit d'outils présente les limites suivantes:

  • Les noms des colonnes des tables BigQuery existantes et nouvelles doivent correspondre (en ignorant les colonnes de métadonnées). La migration échoue si vous appliquez des fonctions définies par l'utilisateur (UDF) de Dataflow qui modifient les noms des colonnes des tables existantes (par exemple, en ajoutant un préfixe ou en modifiant la casse).
  • Les migrations interrégionales et interprojets ne sont pas acceptées.
  • La migration fonctionne par table.
  • Seules les sources Oracle et MySQL sont acceptées.