Auf dieser Seite werden Best Practices für Anwendungsfälle beschrieben, bei denen Folgendes zutrifft:
- 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 Datastream-Backfill-Funktion zu nutzen, entweder aufgrund der erforderlichen Zeit oder aufgrund von Produkteinschränkungen.
Problem
Bei einer BigQuery-Tabelle, die mit der BigQuery Storage Write API befüllt wird, sind keine regulären DML-Vorgänge (Data Manipulation Language) zulässig. Sobald ein CDC-Stream in eine BigQuery-Tabelle schreibt, können also keine Verlaufsdaten mehr hinzugefügt werden, die in der Tabelle noch nicht vorab ausgefüllt wurden.
Stellen Sie sich folgendes Szenario vor:
- TIMESTAMP 1: Der Kopiervorgang für die Tabelle wird gestartet.
- 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).
- TIMESTAMP 3: CDC wurde gestartet, Änderungen in TIMESTAMP 2 werden nicht erfasst, was zu Datendiskrepanzen führt.
Lösung
Um die Datenintegrität zu gewährleisten, muss der CDC-Prozess alle Änderungen in der Quelle erfassen, die ab dem Moment nach der letzten Aktualisierung, die in die BigQuery-Tabelle kopiert wurde, erfolgt sind.
Mit der folgenden Lösung können Sie dafür sorgen, dass der CDC-Prozess alle Änderungen aus TIMESTAMP 2 erfasst, ohne den Kopiervorgang am Schreiben von Daten in die BigQuery-Tabelle zu hindern.
Vorbereitung
- Die Zieltabelle in BigQuery muss genau dasselbe Schema und dieselbe Konfiguration wie die Tabelle haben, die von Datastream erstellt wurde. Sie können dazu das Datastream BigQuery Migration Toolkit verwenden.
- Bei MySQL- und Oracle-Quellen muss der Nutzer die Logposition zu dem Zeitpunkt identifizieren können, zu dem der Kopiervorgang gestartet wird.
- Die Datenbank muss genügend Speicher und Logaufbewahrungsrichtlinien haben, damit der Kopiervorgang der Tabelle abgeschlossen werden kann.
MySQL- und Oracle-Quellen
- 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 CREATED haben.
- Wenn Sie bereit sind, den Kopiervorgang für die Tabelle zu starten, ermitteln Sie die aktuelle Logposition der Datenbank:
- In der MySQL-Dokumentation für MySQL erfahren Sie, wie Sie die Koordinaten des binären Logs für die Replikation abrufen. Nachdem Sie die Logposition 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
- Tabelle aus der Quelldatenbank in BigQuery kopieren.
- Führen Sie nach Abschluss des Kopiervorgangs die Schritte auf der Seite Streams verwalten aus, um den Stream ab der zuvor angegebenen Logposition zu starten.
PostgreSQL-Quellen
- Wenn Sie mit dem Kopieren der Tabelle beginnen möchten, erstellen Sie den Replikationsslot. Weitere Informationen finden Sie unter PostgreSQL-Quelldatenbank konfigurieren.
- Tabelle aus der Quelldatenbank in BigQuery kopieren.
- Sobald der Kopiervorgang abgeschlossen ist, können Sie den Stream erstellen und starten.