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 et avez installé Docker.
  • Vous savez cloner des dépôts à partir de services tels que GitHub.
  • Vous savez comment exécuter des flux dans Datastream.
  • Vous avez installé la Google Cloud CLI.

Présentation du kit d'outils de migration

Le kit de migration Datastream pour BigQuery 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 pour migrer depuis d'autres pipelines, comme expliqué dans la section Migrer depuis d'autres pipelines ci-dessous.

Pour migrer vos tables BigQuery à l'aide du kit d'outils, vous devez procéder comme suit :

  1. Créer, démarrer et mettre en veille un flux Datastream avec une destination BigQuery
  2. Exécutez la migration sur chaque table BigQuery à migrer.
  3. Reprenez 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 Discover de 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 migrez pour déterminer les conversions de types de données nécessaires.
  • Copie toutes les lignes existantes de la table d'origine dans la nouvelle table, y compris les casts de type de colonne appropriés.

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

Configurer le kit d'outils 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 à son répertoire :

    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 projet Google Cloud.

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

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

  2. Démarrez le flux, puis mettez-le 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. Vidangez 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 du flux et attendez au moins la durée de la latence actuelle pour vous assurer que tous les événements en cours sont écrits dans la destination.
    3. Drainez le job 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 les 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 projet Google Cloud.
      • 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'explorateur de journaux Google Cloud 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é les données dans BigQuery. Elle ne s'affiche que si des données CDC doivent être chargées.

Migrer depuis d'autres pipelines

Le kit d'outils vous permet également de migrer d'autres pipelines vers la solution BigQuery intégrée à Datastream. Le kit d'outils peut générer des LDD 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 les lignes. Vous pouvez utiliser les schémas dans le répertoire LDD de la table source (output/source_table_ddl) et le répertoire LDD de la table de destination (output/create_target_table) pour créer une instruction SQL avec les 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 dans votre table de destination.
  • SOURCE_COLUMN : nom de la colonne dans votre table source.
  • SOURCE_TABLE : nom de votre table source.

Limites

L'ensemble d'outils présente les limites suivantes :

  • Les noms de 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 Dataflow (UDF) qui modifient les noms des colonnes dans les tables existantes (par exemple, en ajoutant un préfixe ou en modifiant la casse).
  • Les migrations interrégionales et multiprojets ne sont pas acceptées.
  • La migration fonctionne par table.
  • Seules les sources Oracle et MySQL sont acceptées.