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:
- TIMESTAMP 1: Der Tabellenkopiervorgang 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 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
- 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.
- 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
- Kopieren Sie die Tabelle aus der Quelldatenbank in BigQuery.
- 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
- Wenn Sie mit dem Kopieren der Tabelle beginnen möchten, erstellen Sie den Replikationsslot. Weitere Informationen finden Sie unter PostgreSQL-Quelldatenbank konfigurieren.
- Kopieren Sie die Tabelle aus der Quelldatenbank in BigQuery.
- Sobald der Kopiervorgang abgeschlossen ist, erstellen und starten Sie den Stream.