Datastream BigQuery Migration Toolkit


Auf dieser Seite werden Best Practices für die Migration von der Dataflow-Vorlage „Datastream für BigQuery“ zur integrierten BigQuery-Replikationslösung von Datastream beschrieben.

Hinweis

Bei den Anweisungen auf dieser Seite wird Folgendes vorausgesetzt:

  • Sie sind mit Docker vertraut und haben es installiert.
  • Sie wissen, wie Sie Repositories aus Diensten wie GitHub klonen.
  • Sie wissen, wie Sie Streams in Datastream ausführen.
  • Sie haben die Google Cloud CLI installiert.

Migrations-Toolkit – Übersicht

Das Datastream BigQuery Migration Toolkit ist eine Open-Source-Software von Google Cloud. Mit dem Toolkit können Sie von der Dataflow-Vorlage Datastream zu BigQuery migrieren. Sie können es aber auch für die Migration von anderen Pipelines verwenden, wie im folgenden Abschnitt Von anderen Pipelines migrieren erläutert.

So migrieren Sie Ihre BigQuery-Tabellen mit dem Toolkit:

  1. Erstellen, starten und pausieren Sie einen Datastream-Stream mit BigQuery-Ziel.
  2. Führen Sie die Migration für jede BigQuery-Tabelle aus, die migriert werden muss.
  3. Setzen Sie den Stream fort.

Das Toolkit bietet folgende Funktionen:

  • Ruft das Schema der Quelltabelle mithilfe der Datastream Discover API ab.
  • Erstellt eine BigQuery-Tabelle, die mit Datastream kompatibel ist, basierend auf dem abgerufenen Schema.
  • Hier wird das Schema der BigQuery-Tabelle abgerufen, aus der Sie migrieren, um die erforderlichen Datentypkonvertierungen zu ermitteln.
  • Alle vorhandenen Zeilen aus der ursprünglichen Tabelle werden in die neue Tabelle kopiert, einschließlich der entsprechenden Casts für den Spaltentyp.

Weitere Informationen zur Struktur des Toolkits und zu den verwendeten Argumenten finden Sie in der README.md-Datei des Toolkits.

Migrations-Toolkit einrichten

So führen Sie das Migrations-Toolkit mit Docker aus:

  1. Klonen Sie das Repository und wechseln Sie in das entsprechende Verzeichnis:

    git clone https://github.com/GoogleCloudPlatform/datastream-bigquery-migration-toolkit &&
    cd datastream-bigquery-migration-toolkit
    
  2. Erstellen Sie das Image:

    docker build -t migration-service .
    
  3. Authentifizieren Sie sich mit Ihren Google Cloud CLI-Anmeldedaten:

    docker run -ti \
    --name gcloud-config migration-service gcloud auth application-default login
    
  4. Legen Sie die Google Cloud -Projekteigenschaft fest:

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

    Ersetzen Sie PROJECT_ID durch die ID Ihres Google Cloud Projekts.

Von Dataflow zur integrierten Datastream-Lösung migrieren

  1. Datastream-Stream mit BigQuery-Ziel erstellen

  2. Starte den Stream und halte ihn sofort an. So kann Datastream die Position erfassen, von der aus Änderungen erfasst werden, bevor die Migration beginnt.

  3. Datastream und Dataflow-Pipeline leeren:

    1. Pausieren Sie den vorhandenen Cloud Storage-Zielstream.
    2. Prüfen Sie den Messwert „Gesamtlatenz“ für den Stream und warten Sie mindestens so lange wie die aktuelle Latenz, damit alle laufenden Ereignisse in das Ziel geschrieben werden.
    3. Drain-Vorgang für den Dataflow-Job ausführen
  4. Migration ausführen

    1. Führen Sie die Migration im dry_run-Modus aus. Im dry_run-Modus können Sie die DDL-Anweisung CREATE TABLE und die SQL-Anweisung zum Kopieren von Daten generieren, ohne sie auszuführen:

      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
      

      Ersetzen Sie Folgendes:

      • PROJECT_ID: Die eindeutige Kennung Ihres Google Cloud Projekts.
      • STREAM_ID: Die eindeutige Kennung Ihres BigQuery-Zielanrufsstreams.
      • STREAM_REGION: Der Speicherort Ihres Streams, z. B. us-central1.
      • SOURCE_SCHEMA_NAME: Der Name des Quellschemas.
      • SOURCE_TABLE_NAME ist der Name der Quelltabelle.
      • BIGQUERY_SOURCE_DATASET_NAME: Der Name des vorhandenen BigQuery-Datasets.
      • BIGQUERY_SOURCE_TABLE_NAME: Der Name der vorhandenen BigQuery-Tabelle.
    2. Prüfen Sie die .sql-Dateien unter output/create_target_table und output/copy_rows. Das sind die SQL-Befehle, die in Ihrem Google Cloud -Projekt ausgeführt werden:

      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. Führen Sie die Migration im full-Modus aus, um die SQL-Befehle auszuführen. Im Modus full können Sie eine Tabelle in BigQuery erstellen und alle Zeilen aus der vorhandenen BigQuery-Tabelle kopieren:

      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. Setzen Sie den pausierten Stream fort.

  6. Öffnen Sie den Google Cloud Log-Explorer und suchen Sie mit der folgenden Abfrage nach Datastream-Logs:

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

    Suchen Sie nach dem folgenden Log, wobei %d eine Zahl ist:

    Completed writing %d records into..
    

    Dieses Protokoll zeigt an, dass Daten mit dem neuen Stream erfolgreich in BigQuery geladen wurden. Sie wird nur angezeigt, wenn es CDC-Daten zum Laden gibt.

Von anderen Pipelines migrieren

Mit dem Toolkit können Sie auch von anderen Pipelines zur integrierten BigQuery-Lösung von Datastream migrieren. Mit dem Toolkit können Sie CREATE TABLE-DDLs für Datastream-kompatible BigQuery-Tabellen basierend auf dem Schema der Quelldatenbank generieren. Verwenden Sie dazu den Modus 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

Da die BigQuery-Tabellenschemata variieren können, ist es schwierig, eine universelle SQL-Anweisung zum Kopieren von Zeilen anzugeben. Sie können die Schemas im DDL-Verzeichnis der Quelltabelle (output/source_table_ddl) und im DDL-Verzeichnis der Zieltabelle (output/create_target_table) verwenden, um eine SQL-Anweisung mit geeigneten Casts für die Quellspalten zu erstellen.

Im Folgenden finden Sie ein Beispiel für ein SQL-Anweisungsformat, das Sie verwenden können:

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

Ersetzen Sie Folgendes:

  • DESTINATION_TABLE: Der Name der Zieltabelle in BigQuery.
  • DESTINATION_COLUMN: Der Name der Spalte in der Zieltabelle.
  • SOURCE_COLUMN: Der Name der Spalte in der Quelltabelle.
  • SOURCE_TABLE: Der Name der Quelltabelle.

Beschränkungen

Für das Toolkit gelten die folgenden Einschränkungen:

  • Die Spaltennamen in den vorhandenen und neuen BigQuery-Tabellen müssen übereinstimmen (Metadatenspalten werden ignoriert). Die Migration schlägt fehl, wenn Sie benutzerdefinierte Funktionen (UDFs) für den Datenfluss anwenden, die die Namen der Spalten in den vorhandenen Tabellen ändern, z. B. durch Hinzufügen eines Präfixes oder Ändern der Groß- und Kleinschreibung.
  • Regionen- und projektübergreifende Migrationen werden nicht unterstützt.
  • Die Migration erfolgt pro Tabelle.
  • Es werden nur Oracle- und MySQL-Quellen unterstützt.