Allgemeine Informationen zu Openflow Connector for SQL Server¶
Bemerkung
Dieser Connector unterliegt den `Nutzungsbedingungen für Snowflake Connector<https://www.snowflake.com/legal/snowflake-connector-terms/>`_.
Unter diesem Thema werden die grundlegenden Konzepte, der Workflow und die Einschränkungen des Openflow Connector for SQL Server beschrieben.
Allgemeine Informationen zum Openflow Connector for SQL Server¶
Der Openflow Connector for SQL Server verbindet eine SQL Server-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 SQL Server-Daten mit Snowflake für eine umfassende, zentralisierte Berichterstattung.
Unterstützte SQL-Server-Versionen¶
Die folgenden SQL Server-Datenbankversionen und Plattformen werden unterstützt:
Microsoft SQL Server 2019
Microsoft SQL Server 2017
Microsoft SQL Server 2016
Google Cloud SQL für SQL Server
Bemerkung
Der Konnektor basiert auf SQL Server-Änderungsverfolgung, die ab SQL Server 2008 verfügbar ist. Frühere Versionen unterstützen dieses Feature nicht und sind mit dem Konnektor nicht kompatibel.
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
1setzen.
Einschränkungen¶
Sie können nicht mehrere Konnektoren desselben Typs in einer einzigen Laufzeitinstanz ausführen.
Der Konnektor unterstützt nur die Authentifizierung mit Benutzernamen und Kennwort über SQL-Server.
Der Konnektor repliziert nur Tabellen mit Datentypen, die von Snowflake unterstützt werden. Eine Liste dieser Datentypen finden Sie unter Zusammenfassung der Datentypen.
Der Konnektor repliziert nur Datenbanktabellen, die Primärschlüssel enthalten.
Der Konnektor aktualisiert keine bestehenden Datensätze in der Snowflake-Datenbank, wenn eine neue NOT NULL-Spalte mit einem Standardwert erstellt wird, der zu einer der Quelldatenbanken hinzugefügt wird.
Der Konnektor aktualisiert keine bestehenden Datensätze in der Snowflake-Datenbank, wenn eine neue Spalte zur Liste der einbezogenen Spalten Column Filter JSON hinzugefügt wird.
Nachdem Sie eine Spalte in einer der Quelldatenbanken gelöscht und unter demselben Namen wieder hinzugefügt haben, führen weitere Löschvorgänge zu Fehlern.
Nachdem Sie eine Spalte in den JSON-Spaltenfilter eingefügt haben und sie ausschließen, führen weitere Einschließungsversuche zu Fehlern.
Der Konnektor unterstützt Änderungen am Schema einer Quelltabelle, mit Ausnahme von Änderungen an Primärschlüsseldefinitionen, Änderungen der Genauigkeit oder der Dezimalstellenzahl einer numerischen Spalte.
Der Konnektor unterstützt die Operation „Tabelle kürzen“ nicht.
Der Konnektor unterstützt nicht das erneute Hinzufügen einer Spalte, nachdem sie gelöscht wurde.
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.
Bemerkung
Sie können Beschränkungen, die bestimmte Tabellenspalten betreffen, umgehen, indem Sie diese spezifischen Spalten von der Replikation ausschließen.
Workflow¶
Der folgende Workflow beschreibt die Schritte zur Einrichtung und Ausführung des Openflow Connector for SQL Server:
Ein SQL-Server Datenbankadministrator führt die folgenden Aufgaben aus:
Konfiguriert die Einstellungen für die SQL-Serverreplikation und aktiviert die Änderungsverfolgung für die zu replizierenden Datenbanken und Tabellen.
Erzeugt Anmeldeinformationen für den Konnektor.
(Optional) Stellt das SSL-Zertifikat bereit, um eine Verbindung zur SQL-Serverinstanz über SSL herzustellen.
Ein Snowflake-Kontoadministrator führt folgende Aufgaben aus:
Erstellt einen Servicebenutzer für den Konnektor, eine Zieldatenbank zum Speichern replizierter Daten und ein Warehouse für den Konnektor.
Installiert den Konnektor.
Gibt die erforderlichen Parameter für die Definition des Konnektorablaufs an.
Führt den Flow aus.
Wenn der Konnektor in Openflow ausgeführt wird, verhält er sich wie folgt:
Erstellt die Schemas und Zieltabellen, die mit den für die Replikation konfigurierten Quelltabellen übereinstimmen.
Beginnt die Replikation gemäß dem Lebenszyklus der Tabellenreplikation.
Weitere Informationen dazu finden Sie unter Replizieren von Tabellen.
Funktionsweise des Konnektors¶
In den folgenden Abschnitten wird beschrieben, wie der Konnektor in verschiedenen Szenarien funktioniert, einschließlich Replikation, Schemaänderungen und Datenaufbewahrung.
Datenreplikation¶
Der Konnektor unterstützt das Replizieren von Tabellen aus mehreren SQL-Serverdatenbanken in einer einzigen SQL-Serverinstanz. Der Konnektor erstellt replizierte Tabellen aus verschiedenen Datenbanken in separaten Schemas innerhalb der Snowflake-Zieldatenbank.
Referenziert replizierte Tabellen, indem der Name der Quelldatenbank, der Name des Quellschemas und der Tabellennamen im folgenden Format kombiniert werden:
<database_name>.<schema_name>.<table_name>
Für jedes Schema in jeder zu replizierenden Quelldatenbank erstellt der Konnektor ein separates Schema in der Snowflake-Zieldatenbank. Der Name des Zielschemas ist eine Kombination aus dem Namen der Quelldatenbank und dem Namen des Quellschemas, getrennt durch einen Unterstrich (_), wie im folgenden Beispiel gezeigt:
<source_database_name>_<source_schema_name>
Der Konnektor erstellt im Zielschema Tabellen mit demselben Namen wie der Name der Quelltabelle, wie im folgenden Beispiel gezeigt:
<destination_database>_<destination_schema_name>.<source_table_name>
Replizieren von Tabellen¶
Der Konnektor repliziert Tabellen in den folgenden Phasen:
Schema-Introspektion: Der Konnektor erkennt die Spalten in der Quelltabelle, einschließlich der Namen und Typen der Spalten, und validiert sie dann anhand der Beschränkungen von Snowflake und des Konnektors. Wenn die Validierung fehlschlägt, schlägt diese Phase fehl, und der Zyklus ist abgeschlossen. Nach erfolgreichem Abschluss dieser Phase erstellt der Konnektor eine leere Zieltabelle.
Laden von Snapshots: Der Konnektor kopiert alle in der Quelltabelle verfügbaren Daten in die Zieltabelle. Wenn diese Phase fehlschlägt, beendet der Konnektor die Replikation der Daten. Nach erfolgreichem Abschluss sind die Daten aus der Quelltabelle in der Zieltabelle verfügbar.
Inkrementelles Laden: Der Konnektor verfolgt Änderungen in der Quelltabelle und wendet diese Änderungen auf die Zieltabelle an. Dieser Vorgang wird fortgesetzt, 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.
Informationen zum Umgehen des Snapshot-Ladens und zur Verwendung des inkrementellen Ladeprozesses finden Sie unter Inkrementelle Replikation.
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:
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.
Suchen Sie die Zeile mit der Bezeichnung Table State Store, klicken Sie rechts neben der Zeile auf die Schaltfläche More
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>
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 |
|---|---|---|
|
TIMESTAMP_NTZ |
Der Zeitstempel, der angibt, wann die Zeile ursprünglich in die Zieltabelle eingefügt wurde. |
|
TIMESTAMP_NTZ |
Der Zeitstempel, der angibt, wann die Zeile in der Zieltabelle zuletzt aktualisiert wurde. |
|
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;
So fragen Sie gelöschte Zeilen ab:
SELECT * FROM my_table WHERE _SNOWFLAKE_DELETED = TRUE;
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;
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 WertNULL.B: Enthält Werte, wie sie nach dem Umbenennen vorhanden sind. Zeilen, die vor dem Umbenennen vorhanden waren, haben in dieser Spalte den WertNULL.
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;
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;
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;
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 SQL Server: Datenzuordnung an, um zu verstehen, wie der Konnektor Datentypen den Snowflake-Datentypen zuordnet.
Sehen Sie sich die Einrichten von Openflow Connector for SQL Server an, um dem Konnektor einzurichten.