Datastream mit einer vorhandenen BigQuery-Tabelle verwenden

Auf dieser Seite werden Best Practices für Anwendungsfälle beschrieben, in denen:

  • Nutzer haben eine vorhandene Tabelle in BigQuery und müssen ihre Daten mithilfe von Change Data Capture (CDC) in dieselbe BigQuery-Tabelle replizieren.
  • Nutzer müssen Daten in eine vorhandene BigQuery-Tabelle kopieren, ohne die Backfill-Funktion von Datastream zu verwenden, entweder aufgrund der Zeit, die dafür erforderlich wäre, oder aufgrund von Produkteinschränkungen.

Problem

Für eine BigQuery-Tabelle, die mit der BigQuery Storage Write API ausgefüllt wird, sind keine regulären DML-Vorgänge (Data Manipulation Language) zulässig. Das bedeutet, dass nach dem Start des Schreibens eines CDC-Streams in eine BigQuery-Tabelle keine Verlaufsdaten hinzugefügt werden können, die nicht bereits in der Tabelle vorhanden waren.

Stellen Sie sich folgendes Szenario vor:

  1. TIMESTAMP 1: Der Tabellenkopiervorgang wird gestartet.
  2. TIMESTAMP 2: Während die Tabelle kopiert wird, führen DML-Vorgänge an der Quelle zu Änderungen an den Daten (Zeilen werden hinzugefügt, aktualisiert oder entfernt).
  3. TIMESTAMP 3: CDC wird gestartet, Änderungen, die bei TIMESTAMP 2 stattgefunden haben, werden nicht erfasst, was zu Datenabweichungen führt.

Lösung

Um die Datenintegrität zu gewährleisten, muss der CDC-Prozess alle Änderungen an der Quelle erfassen, die seit dem letzten Update aufgetreten sind, das in die BigQuery-Tabelle kopiert wurde.

Mit der folgenden Lösung können Sie dafür sorgen, dass der CDC-Prozess alle Änderungen ab TIMESTAMP 2 erfasst, ohne dass der Kopiervorgang das Schreiben von Daten in die BigQuery-Tabelle blockiert.

Vorbereitung

  • Die Zieltabelle in BigQuery muss genau dasselbe Schema und dieselbe Konfiguration haben, als wäre die Tabelle von Datastream erstellt worden. Dazu können Sie das Datastream BigQuery Migration Toolkit verwenden.
  • Bei MySQL- und Oracle-Quellen muss der Nutzer die Protokollposition zum Zeitpunkt des Startens des Kopiervorgangs ermitteln können.
  • Die Datenbank muss genügend Speicherplatz und eine ausreichende Aufbewahrungsrichtlinie für Protokolle haben, damit das Kopieren der Tabelle abgeschlossen werden kann.

MySQL- und Oracle-Quellen

  1. Erstellen Sie den Stream, den Sie für die laufende CDC-Replikation verwenden möchten, aber starten Sie ihn nicht. Der Stream muss den Status ERSTELLT haben.
  2. Wenn Sie mit dem Kopiervorgang der Tabelle beginnen möchten, ermitteln Sie die aktuelle Protokollposition der Datenbank:
    • Informationen zum Abrufen der binären Protokollkoordinaten für die Replikation unter MySQL finden Sie in der MySQL-Dokumentation. Nachdem Sie die Protokollposition ermittelt haben, schließen Sie die Sitzung, um alle Sperren für die Datenbank aufzuheben.
    • Führen Sie für Oracle die folgende Abfrage aus: SELECT current_scn FROM V$DATABASE
  3. Kopieren Sie die Tabelle aus der Quelldatenbank in BigQuery.
  4. Sobald der Kopiervorgang abgeschlossen ist, folge der Anleitung auf der Seite Streams verwalten, um den Stream an der zuvor ermittelten Protokollposition zu starten.

PostgreSQL-Quellen

  1. Wenn Sie mit dem Kopieren der Tabelle beginnen möchten, erstellen Sie den Replikationsslot. Weitere Informationen finden Sie unter PostgreSQL-Quelldatenbank konfigurieren.
  2. Kopieren Sie die Tabelle aus der Quelldatenbank in BigQuery.
  3. Sobald der Kopiervorgang abgeschlossen ist, erstellen und starten Sie den Stream.