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:
- TIMESTAMP 1: Der Tabellenkopiervorgang wird initiiert.
- 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).
- 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
- 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.
- 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.
- Kopieren Sie die Tabelle aus der Quelldatenbank in BigQuery.
- 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
- Wenn Sie bereit sind, die Tabelle zu kopieren, erstellen Sie den Replikationsslot. Weitere Informationen finden Sie unter PostgreSQL-Quelldatenbank konfigurieren.
- Kopieren Sie die Tabelle aus der Quelldatenbank in BigQuery.
- Nach Abschluss des Kopiervorgangs erstellen und starten Sie den Stream.