Datastream BigQuery Migration Toolkit


Auf dieser Seite werden Best Practices für die Verwendung von Datastream für die Migration von die Vorlage „Dataflow Datastream für BigQuery“ über die in Datastream eingebundene BigQuery-Replikationslösung.

Hinweise

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.

Übersicht über das Migrations-Toolkit

Das Datastream BigQuery Migration Toolkit ist eine Open-Source-Software, die von Google Cloud angeboten wird. 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.

Um Ihre BigQuery-Tabellen mit dem Toolkit zu migrieren, müssen Sie führen Sie die folgenden Schritte aus:

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

Das Toolkit erfüllt folgende Aufgaben:

  • Ruft das Schema der Quelltabelle mithilfe der Datastream Discover API ab.
  • Erstellt eine BigQuery-Tabelle, die mit Datastreams kompatibel ist, basierend auf dem abgerufenen Schema.
  • Hiermit wird das Schema der BigQuery-Tabelle abgerufen, von 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 Spaltentypumwandlungen.

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

Migrations-Toolkit einrichten

Führen Sie die folgenden Schritte aus, um das Migrations-Toolkit mit Docker auszuführen:

  1. Klonen Sie das Repository und wechseln Sie in das 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 das Attribut Ihres Google Cloud-Projekts fest:

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

    Ersetzen Sie PROJECT_ID durch die Kennung Ihres Google Cloud-Projekts.

Von Dataflow zur integrierten Datastream-Lösung migrieren

  1. Datastream-Stream mit einem BigQuery-Ziel erstellen

  2. Starte den Stream und halte ihn sofort an. Dadurch kann Datastream um die Position zu erfassen, von der aus Änderungen vor Beginn der Migration erfasst werden.

  3. Datastream- und Dataflow-Pipeline ablaufen lassen:

    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. Leeren Sie den Dataflow-Job.
  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 Ihrer Google Cloud Projekt arbeiten.
      • STREAM_ID: Die eindeutige Kennung Ihrer BigQuery-Datei Zielstreams an.
      • 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 des vorhandenen BigQuery-Objekts. .
    2. Prüfen Sie die .sql-Dateien unter output/create_target_table und output/copy_rows. Die folgenden SQL-Befehle werden in Ihrem Google Cloud-Projekt ausgeführt:

      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 Log-Explorer von Google Cloud und suchen Sie nach Datastream-Logs durch die folgende Abfrage:

    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 CDC-Daten geladen werden müssen.

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 in der Quelle verwenden Tabellen-DDL-Verzeichnis (output/source_table_ddl) und Zieltabellen-DDL (output/create_target_table), um eine SQL-Anweisung mit entsprechenden casts in die Quelle Spalten.

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 Ihrer 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

Das Toolkit hat folgende Einschränkungen:

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