Allgemeine Informationen zu Openflow Connector for PostgreSQL

Unter diesem Thema werden die grundlegenden Konzepte, der Workflow und die Beschränkungen von Openflow Connector for PostgreSQL beschrieben.

Allgemeine Informationen zum Openflow Connector for PostgreSQL

Openflow Connector for PostgreSQL verbindet eine PostgreSQL-Datenbankinstanz mit Snowflake und repliziert Daten aus ausgewählten Tabellen nahezu in Echtzeit oder nach Zeitplan. Der Konnektor erstellt außerdem ein Protokoll aller Datenänderungen, das zusammen mit dem aktuellen Status der replizierten Tabellen verfügbar ist.

Anwendungsfälle

Verwenden Sie diesen Konnektor, wenn Sie Folgendes tun möchten:

  • CDC-Replikation von PostgreSQL-Daten mit Snowflake für eine umfassende, zentralisierte Berichterstattung.

Unterstützte PostgreSQL-Versionen

Im Folgenden finden Sie die unterstützten PostgreSQL-Versionen.

Unterstützte PostgreSQL-Versionen

11

12

13

14

15

16

17

18

Standard

Ja

Ja

Ja

Ja

Ja

Ja

Ja

Ja

AWS RDS

Ja

Ja

Ja

Ja

Ja

Ja

Ja

Ja

Amazon Aurora

Ja

Ja

Ja

Ja

Ja

Ja

Ja

GCP Cloud SQL

Ja

Ja

Ja

Ja

Ja

Ja

Ja

Azure Database

Ja

Ja

Ja

Ja

Ja

Ja

Ja

Openflow-Anforderungen

  • Die Laufzeitgröße muss mindestens „Medium“ sein. Verwenden Sie eine größere Laufzeit, wenn Sie große Datenmengen replizieren, insbesondere wenn die Zeilen groß sind.

  • Der Konnektor unterstützt keine Openflow-Laufzeitumgebungen mit mehreren Knoten. Konfigurieren Sie die Laufzeit für diesen Konnektor, indem Sie Min nodes und Max nodes auf 1 setzen.

Einschränkungen

  • Der Konnektor unterstützt PostgreSQL Version 11 oder höher.

  • Der Konnektor unterstützt nur die Authentifizierung mit Benutzername und Kennwort über PostgreSQL.

  • Der Konnektor repliziert keine einzelnen Werte, die größer als 16 MB sind. Standardmäßig führt die Verarbeitung eines solchen Wertes dazu, dass die zugehörige Tabelle als dauerhaft fehlgeschlagen markiert wird. Um Tabellenfehler zu vermeiden, ändern Sie den Zielparameter Oversized Value Strategy.

  • Der Konnektor repliziert keine Tabellen mit Daten, die Typbeschränkungen von Snowflake überschreiten. Eine Ausnahme von dieser Regel stellen Spalten mit Datums- und Zeitdatentypen dar, die Werte außerhalb des Bereichs enthalten. Weitere Informationen dazu finden Sie unter Unterstützung von Werten außerhalb des Bereichs.

  • Der Konnektor verlangt, dass jede replizierte Tabelle einen Primärschlüssel hat und dass die Replikatidentität der Tabelle mit dem Primärschlüssel übereinstimmt.

  • Der Konnektor unterstützt Änderungen am Schema der Quelltabelle mit Ausnahme von Änderungen der Primärschlüsseldefinition, der Genauigkeit oder der Skalierung einer numerischen Spalte.

  • Der Konnektor unterstützt nicht das erneute Hinzufügen einer Spalte, nachdem sie gelöscht wurde.

Bemerkung

Beschränkungen, die bestimmte Tabellenspalten betreffen, können umgangen werden, indem diese Spalten von der Replikation ausgeschlossen werden.

Workflow

  1. Ein Datenbankadministrator konfiguriert PostgreSQL-Replikationseinstellungen und erstellt eine Veröffentlichung sowie Anmeldeinformationen für den Konnektor. Optional stellt er das SSL-Zertifikat bereit.

  2. Ein Snowflake-Kontoadministrator führt folgende Aufgaben aus:

    1. Erstellt einen Benutzer für den Konnketor, ein Warehouse für den Konnektor und eine Zieldatenbank, in die repliziert werden soll.

    2. Installiert den Konnektor.

    3. Gibt die erforderlichen Parameter für die Ablaufvorlage an.

    4. Führt den Ablauf aus. Der Konnektor führt bei der Ausführung in Openflow die folgenden Aktionen aus:

      1. Erstellt ein Schema für Journaltabellen.

      2. Erstellt die Schemas und Zieltabellen, die mit den für die Replikation konfigurierten Quelltabellen übereinstimmen.

      3. Startet die Replikation gemäß dem Lebenszyklus der Tabellenreplikation.

Funktionsweise des Konnektors

In den folgenden Abschnitten wird beschrieben, wie der Konnektor in verschiedenen Szenarien funktioniert, einschließlich Replikation, Schemaänderungen und Datenaufbewahrung.

Wie Tabellen repliziert werden

  1. Schema-Introspektion: Der Konnektor ermittelt die Spalten in der Quelltabelle, ihre Namen und Typen und validiert sie dann anhand der Beschränkungen von Snowflake und des Konnektors. Wenn die Validierung fehlschlägt, schlägt dieser Schritt fehl, und der Zyklus ist abgeschlossen. Nach erfolgreichem Abschluss der Schema-Introspektion erstellt der Konnektor eine leere Zieltabelle.

  2. Laden des Snapshots: Der Konnektor kopiert alle in der Quelltabelle verfügbaren Daten in die Zieltabelle. Wenn dieser Schritt fehlschlägt, ist der Zyklus beendet und es werden keine weiteren Daten repliziert. Nach erfolgreichem Abschluss ist der gesamte Datensatz aus der Quelltabelle in der Zieltabelle verfügbar.

  3. Inkrementelles Laden: Der Konnektor verfolgt die Änderungen in der Quelltabelle und kopiert sie in die Zieltabelle. Dies geschieht so lange, bis die Tabelle aus der Replikation entfernt wird. Bei einem Fehler in diesem Schritt wird die Replikation der Quelltabelle dauerhaft gestoppt, bis das Problem behoben ist.

    Bemerkung

    Dieser Konnektor kann so konfiguriert werden, dass er sofort mit der Replikation inkrementeller Änderungen für neu hinzugefügte Tabellen beginnt und damit die Phase des Ladens von Snapshots umgeht. Diese Option ist oft nützlich, wenn Sie den Konnektor in einem Konto erneut installieren, in dem zuvor replizierte Daten vorhanden sind, und Sie die Replikation fortsetzen möchten, ohne Tabellen neu erstellen zu müssen.

    Weitere Informationen zum Umgehen des Snapshot-Ladens und zur Verwendung des inkrementellen Ladeprozesses finden Sie unter Inkrementelle Replikation.

Wichtig

Zwischenzeitliche Fehler, wie z. B. Verbindungsfehler, verhindern nicht, dass Tabellen repliziert werden. Permanente Fehler, z. B. nicht unterstützte Datentypen, verhindern, dass Tabellen repliziert werden. Wenn ein permanenter Fehler die Replikation einer Tabelle verhindert, entfernen Sie die Tabelle aus der Liste der replizierten Tabellen. Nachdem Sie das Problem behoben haben, das den Fehler verursacht hat, können Sie die Tabelle wieder zur Liste der replizierten Tabellen hinzufügen.

Unterstützung von TOASTed-Werten

Der Konnektor unterstützt das Replizieren von Tabellen mit TOAST-Werten für Spalten der Typen: array, bytea, json, jsonb, text, varchar, xml.

Immer, wenn der Konnektor auf einen TOASTed-Wert im CDC-Stream stößt, ersetzt er den Standardplatzhalter von __previous_value_unchanged, formatiert für den angegebenen Spaltentyp, und speichert ihn in der Journaltabelle. Die MERGE-Abfrage berücksichtigt dann Platzhalterwerte, sodass die Zieltabelle immer den letzten Nicht-TOASTed-Wert enthält.

Unterstützung von Werten außerhalb des Bereichs

Der Konnektor unterstützt das Replizieren von Tabellen mit Spalten des Typs date, timestamp``und ``timestamptz, die Werte außerhalb des Bereichs enthalten. Wenn der Konnektor im CDC-Stream auf einen Wert außerhalb des Bereichs stößt, ersetzt er einen Standardplatzhalter basierend auf dem Typ der Spalte.

Platzhalterwerte für Werte außerhalb des Bereichs

Spaltentyp

Platzhalterwert

date

-9999-01-01 bis 9999-12-31.

timestamp

0001-01-01 00:00:00 bis 9999-12-31 23:59:59.999999999.

timestamptz

0001-01-01 00:00:00+00 bis 9999-12-31 23:59:59.999999999+00.

Bemerkung

-Infinity- und Infinity-Werte werden ebenfalls durch die entsprechenden Platzhalter für alle drei Typen ersetzt.

Status der Tabellenreplikation

Zwischenzeitliche Fehler, wie z. B. Verbindungsfehler, verhindern nicht, dass Tabellen repliziert werden. Permanente Fehler, z. B. nicht unterstützte Datentypen, verhindern jedoch die Replikation von Tabellen.

Um Replikationsprobleme zu beheben oder sicherzustellen, dass eine Tabelle erfolgreich aus dem Replikationsablauf entfernt wurde, überprüfen Sie den Table State Store:

  1. Klicken Sie in der Openflow-Laufzeitoberfläche mit der rechten Maustaste auf eine Prozessorgruppe und wählen Sie Controller Services. Es wird eine Tabelle mit den Controllerndiensten angezeigt.

  2. Suchen Sie die Zeile mit der Bezeichnung Table State Store, klicken Sie rechts neben der Zeile auf die Schaltfläche More Drei vertikale Punkte, die weitere Optionen anzeigen und wählen Sie View State.

Eine Liste der Tabellen und ihrer aktuellen Statusangaben wird angezeigt. Geben Sie einen Namen in das Suchfeld ein, um die Liste nach Tabellennamen zu filtern. Die möglichen Statusangaben sind:

  • NEW: Die Replikation der Tabelle ist geplant, aber die Replikation wurde noch nicht gestartet.

  • SNAPSHOT_REPLICATION: Der Konnektor kopiert vorhandene Daten. Dieser Status wird so lange angezeigt, bis alle Datensätze in der Zieltabelle gespeichert sind.

  • INCREMENTAL_REPLICATION: Der Konnektor repliziert aktiv Änderungen. Dieser Status wird nach dem Ende der Snapshot-Replikation angezeigt und so lange, bis eine Tabelle entweder aus der Replikation entfernt wird oder die Replikation fehlschlägt.

  • FAILED: Die Replikation wurde aufgrund eines Fehlers dauerhaft gestoppt.

Bemerkung

Die Openflow-Laufzeitoberfläche zeigt keine Änderungen des Tabellenstatus an – nur den aktuellen Tabellenstatus. Jegliche Änderungen am Tabellenstatus werden jedoch in den Protokollen erfasst. Suchen Sie nach der folgenden Protokollmeldung:

Replication state for table <database_name>.<schema_name>.<table_name> changed from <old_state> to <new_state>
Copy

Wenn ein permanenter Fehler die Replikation der Tabelle verhindert, entfernen Sie die Tabelle aus der Replikation. Nachdem Sie das Problem behoben haben, das den Fehler verursacht hat, können Sie die Tabelle wieder zur Replikation hinzufügen. Weitere Informationen dazu finden Sie unter Replikation der Tabellen neu starten.

Erläuterungen zur Datenaufbewahrung

Der Konnektor folgt einem Datenaufbewahrungskonzept, bei dem Kundendaten niemals automatisch gelöscht werden. Sie behalten die volle Eigentümerschaft und Kontrolle über Ihre replizierten Daten, und der Konnektor bewahrt historische Informationen auf, anstatt sie dauerhaft zu entfernen.

Dieser Ansatz hat die folgenden Auswirkungen:

  • Zeilen, die aus der Quelltabelle gelöscht werden, werden in der Zieltabelle vorläufig gelöscht und nicht physisch entfernt.

  • Spalten, die aus der Quelltabelle entfernt wurden, werden in der Zieltabelle umbenannt und nicht gelöscht.

  • Journaltabellen werden auf unbestimmte Zeit aufbewahrt und nicht automatisch bereinigt.

Metadatenspalten der Zieltabelle

Jede Zieltabelle enthält die folgenden Metadatenspalten, in denen Replikationsinformationen verfolgt werden:

Spaltenname

Typ

Beschreibung

_SNOWFLAKE_INSERTED_AT

TIMESTAMP_NTZ

Der Zeitstempel, der angibt, wann die Zeile ursprünglich in die Zieltabelle eingefügt wurde.

_SNOWFLAKE_UPDATED_AT

TIMESTAMP_NTZ

Der Zeitstempel, der angibt, wann die Zeile in der Zieltabelle zuletzt aktualisiert wurde.

_SNOWFLAKE_DELETED

BOOLEAN

Gibt an, ob die Zeile aus der Quelltabelle gelöscht wurde. Wenn``true``, dann wurde die Zeile vorläufig gelöscht und existiert nicht mehr in der Quelle.

Vorläufig gelöschte Zeilen

Wenn eine Zeile aus der Quelltabelle gelöscht wird, entfernt der Konnektor sie nicht physisch aus der Zieltabelle. Stattdessen wird die Zeile durch Festlegen der Metadatenspalte _SNOWFLAKE_DELETED auf true als gelöscht markiert.

Dieser Ansatz ermöglicht Folgendes:

  • Aufbewahrung historischer Daten für Auditing- oder Compliance-Zwecke.

  • Abfragen gelöschter Datensätze bei Bedarf.

  • Anhand Ihrer Anforderungen entscheiden, wann und wie Daten dauerhaft entfernt werden sollen.

Um nur aktive (nicht gelöschte) Zeilen abzufragen, filtern Sie die Spalte _SNOWFLAKE_DELETED:

SELECT * FROM my_table WHERE _SNOWFLAKE_DELETED = FALSE;
Copy

So fragen Sie gelöschte Zeilen ab:

SELECT * FROM my_table WHERE _SNOWFLAKE_DELETED = TRUE;
Copy

Gelöschte Spalten

Wenn eine Spalte aus der Quelltabelle gelöscht wird, löscht der Konnektor die entsprechende Spalte nicht aus der Zieltabelle. Stattdessen wird die Spalte durch Anhängen des Suffix``__SNOWFLAKE_DELETED`` umbenannt, um historische Werte zu erhalten.

Wenn beispielsweise eine Spalte mit dem Namen``EMAIL`` aus der Quelltabelle gelöscht wird, wird sie in EMAIL__SNOWFLAKE_DELETED in der Zieltabelle umbenannt. Zeilen, die vor dem Löschen der Spalte vorhanden waren, behalten ihre ursprünglichen Werte, während Zeilen, die nach dem Löschen hinzugefügt wurden, den Wert NULL in dieser Spalte haben.

Sie können weiterhin historische Werte aus der umbenannten Spalte abfragen:

SELECT EMAIL__SNOWFLAKE_DELETED FROM my_table;
Copy

Umbenannte Spalten

Aufgrund von Einschränkungen desCDC (Change Data Capture)-Mechanismus kann der Konnektor nicht zwischen einer Spalte unterscheiden, die umbenannt wurde, und einer Spalte, die gelöscht wurde, gefolgt von einer neu hinzugefügten Spalte. Wenn Sie eine Spalte in der Quelltabelle umbenennen, behandelt der Konnektor dies daher als zwei separate Vorgänge: Löschen der ursprünglichen Spalte und Hinzufügen einer neuen Spalte mit dem neuen Namen.

Wenn Sie z. B. in der Quelltabelle eine Spalte von A in B umbenennen, enthält die Zieltabelle Folgendes:

  • A__SNOWFLAKE_DELETED: Enthält Werte, wie sie vor dem Umbenennen vorhanden waren. Zeilen, die nach dem Umbenennen hinzugefügt werden, haben in dieser Spalte den Wert NULL.

  • B: Enthält Werte, wie sie nach dem Umbenennen vorhanden sind. Zeilen, die vor dem Umbenennen vorhanden waren, haben in dieser Spalte den Wert NULL.

Abfragen von umbenannten Spalten

Um Daten sowohl aus der ursprünglichen Spalte als auch aus der umbenannten Spalte als eine einzige einheitliche Spalte abzurufen, verwenden Sie einen``COALESCE``- oder``CASE``-Ausdruck:

SELECT
    COALESCE(B, A__SNOWFLAKE_DELETED) AS A_RENAMED_TO_B
FROM my_table;
Copy

Alternativ können Sie auch einen CASE-Ausdruck verwenden:

SELECT
    CASE
        WHEN B IS NOT NULL THEN B
        ELSE A__SNOWFLAKE_DELETED
    END AS A_RENAMED_TO_B
FROM my_table;
Copy

Erstellen einer Ansicht für umbenannte Spalten

Anstatt die Zieltabelle manuell zu ändern, können Sie eine Ansicht erstellen, die die umbenannte Spalte als eine einzige einheitliche Spalte darstellt. Dieser Ansatz wird empfohlen, da so die ursprünglichen Daten erhalten bleiben und mögliche Probleme bei der laufenden Replikation vermieden werden.

CREATE VIEW my_table_unified AS
SELECT
    *,
    COALESCE(B, A__SNOWFLAKE_DELETED) AS A_RENAMED_TO_B
FROM my_table;
Copy

Wichtig

Ein manuelles Ändern der Struktur der Zieltabelle (z. B. das Löschen oder Umbenennen von Spalten) wird nicht empfohlen, da dies die laufende Replikation beeinträchtigen und zu Dateninkonsistenzen führen kann.

Journaltabellen

Bei der inkrementellen Replikation werden Änderungen aus der Quelldatenbank zunächst in Journaltabellen geschrieben, bevor sie in den Zieltabellen zusammengeführt werden. Der Konnektor entfernt nicht automatisch Daten aus Journaltabellen, da diese Daten für Auditing-, Debugging- oder Wiederverarbeitungszwecke nützlich sein können.

Journaltabellen werden im gleichen Schema wie ihre entsprechenden Zieltabellen erstellt und folgen dieser Namenskonvention:

<TABLE_NAME>_JOURNAL_<timestamp>_<number>

Wobei:

  • <TABLE_NAME> ist der Name der Zieldatenbank.

  • <timestamp> ist der Zeitstempel der Erstellung im Unix-Epochenformat (Sekunden seit dem 1. Januar 1970), der die Eindeutigkeit gewährleistet.

  • <number> beginnt bei 1 und wird immer dann erhöht, wenn sich das Schema der Zieltabelle ändert, entweder aufgrund von Schemaänderungen in der Quelltabelle oder aufgrund von Änderungen an den Spaltenfiltern.

Wenn Ihre Zieltabelle beispielsweise SALES.ORDERS ist, könnte die Journaltabelle SALES.ORDERS_JOURNAL_1705320000_1 heißen.

Wichtig

Löschen Sie Journaltabellen nicht, während die Replikation läuft. Das Entfernen einer aktiven Journaltabelle kann zu Datenverlusten oder Replikationsfehlern führen. Löschen Sie Journaltabellen erst, nachdem die entsprechende Quelltabelle vollständig aus der Replikation entfernt wurde.

Verwalten des Journaltabellenspeichers

Wenn Sie Speicherkosten verwalten müssen, indem Sie alte Journaldaten entfernen, können Sie eine Snowflake-Aufgabe erstellen, die regelmäßig Journaltabellen für Tabellen bereinigt, die nicht mehr repliziert werden.

Bevor Sie die Journalbereinigung durchführen, überprüfen Sie Folgendes:

  • Die zugehörigen Quelltabellen wurden vollständig aus der Replikation entfernt.

  • Sie benötigen die Journaldaten nicht mehr für Auditing- oder Verarbeitungszwecke.

Informationen zum Erstellen und Verwalten von Aufgaben für die automatische Bereinigung finden Sie unter :doc:` Einführung in Aufgaben</user-guide/tasks-intro>`.

Nächste Schritte

Sehen Sie sich die Openflow Connector for PostgreSQL: Datenzuordnung an, um zu verstehen, wie der Konnektor Datentypen den Snowflake-Datentypen zuordnet. Sehen Sie sich die Einrichten von Openflow Connector for PostgreSQL an, um dem Konnektor einzurichten.