Datastream mit einer vorhandenen BigQuery-Tabelle verwenden

Wenn ein standardmäßiger Datastream-Backfill zu lange dauert oder Produktbeschränkungen hat, können Sie die ursprünglichen Daten separat in eine vorhandene BigQuery-Tabelle kopieren. Wenn Sie CDC-Updates (Change Data Capture) aus einer bestimmten Logposition in BigQuery streamen, können Sie die Tabelle synchronisieren, ohne einen integrierten Backfill auszuführen.

Problem

Eine BigQuery-Tabelle, die mit der BigQuery Storage Write API gefüllt wird, lässt keine regulären DML-Vorgänge (Data Manipulation Language) zu. Das bedeutet, dass nach dem Start eines CDC-Streams, der in eine BigQuery-Tabelle schreibt, 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 initiiert.
  2. TIMESTAMP 2: Während die Tabelle kopiert wird, führen DML-Vorgänge in der Quelle zu Änderungen an den Daten (Zeilen werden hinzugefügt, aktualisiert oder entfernt).
  3. TIMESTAMP 3: CDC wird gestartet, aber Änderungen, die während TIMESTAMP 2 aufgetreten sind, werden nicht erfasst, was zu einer Datenabweichung führt.

Lösung

Um die Datenintegrität zu gewährleisten, müssen beim CDC-Prozess alle Änderungen in der Quelle erfasst werden, die ab dem Zeitpunkt unmittelbar nach der letzten Aktualisierung aufgetreten sind, die in die BigQuery-Tabelle kopiert wurde.

Mit der folgenden Lösung können Sie sicherstellen, dass beim CDC-Prozess alle die Änderungen ab TIMESTAMP 2 erfasst werden, ohne zu verhindern, dass beim Kopiervorgang die Daten in die BigQuery-Tabelle geschrieben werden.

Vorbereitung

  • Die Zieltabelle in BigQuery muss genau dasselbe Schema und dieselbe Konfiguration haben, als wäre sie von Datastream erstellt worden. Dazu können Sie das Datastream BigQuery Migration Toolkit verwenden.
  • Bei MySQL- und Oracle-Quellen müssen Sie die Logposition zum Zeitpunkt der Initiierung des Kopiervorgangs identifizieren können.
  • Die Datenbank muss ausreichend Speicherplatz und eine angemessene Aufbewahrungsrichtlinie für Logs haben, damit der Tabellenkopiervorgang abgeschlossen werden kann.

MySQL- und Oracle-Quellen

  1. Erstellen Sie den Stream, den Sie für die laufende CDC-Replikation verwenden möchten, starten Sie ihn aber nicht. Der Stream muss den Status CREATED haben.
  2. Wenn Sie bereit sind, den Tabellenkopiervorgang zu starten, ermitteln Sie die aktuelle Logposition der Datenbank:
    • Informationen zum Abrufen der Koordinaten des binären Replikationslogs finden Sie in der MySQL-Dokumentation. Nachdem Sie die Logposition ermittelt haben, schließen Sie die Sitzung, um alle Sperren für die Datenbank freizugeben.
    • 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. Nach Abschluss des Kopiervorgangs folgen Sie der Anleitung auf der Seite Streams verwalten, um den Stream ab der zuvor ermittelten Logposition zu starten.

PostgreSQL-Quellen

  1. Wenn Sie bereit sind, die Tabelle zu kopieren, erstellen Sie den Replikationsslot. Weitere Informationen finden Sie unter PostgreSQL-Quelldatenbank konfigurieren.
  2. Kopieren Sie die Tabelle aus der Quelldatenbank in BigQuery.
  3. Nach Abschluss des Kopiervorgangs erstellen und starten Sie den Stream.