Inkrementelle Übertragungen für Snowflake einrichten

In dieser Anleitung erfahren Sie, wie Sie inkrementelle Datenübertragungen von Snowflake zu BigQuery konfigurieren. Bei inkrementellen Übertragungen werden nur die Daten übertragen, die sich seit dem letzten Übertragungsvorgang geändert haben. Dadurch können Übertragungszeit und ‑kosten reduziert werden.

Beschränkungen

Inkrementelle Snowflake-Übertragungen unterliegen den folgenden Einschränkungen:

  • Sie müssen Primärschlüsselspalten angeben, um den Upsert-Schreibmodus zu verwenden. Weitere Informationen finden Sie unter Primärschlüssel für inkrementelle Übertragungen definieren.
  • Primärschlüssel müssen in der Quelltabelle eindeutig sein. Wenn Duplikate vorhanden sind, sind die Ergebnisse des Zusammenführungs-Vorgangs in BigQuery möglicherweise inkonsistent und stimmen nicht mit den Quelldaten überein.
  • Die automatische Verarbeitung von Schemaänderungen bei inkrementellen Übertragungen wird nicht unterstützt. Wenn sich das Schema einer Quelltabelle ändert, müssen Sie das BigQuery-Tabellenschema manuell aktualisieren.
  • Inkrementelle Übertragungen funktionieren am besten, wenn sich Änderungen an Ihren Quelldaten auf eine kleine Anzahl von Partitionen konzentrieren. Die Leistung bei inkrementellen Übertragungen kann erheblich sinken, wenn Updates über die Quelltabelle verteilt sind, da dann viele Partitionen gescannt werden müssen. Wenn sich viele Zeilen zwischen Datenübertragungen ändern, empfehlen wir stattdessen eine vollständige Übertragung.
  • Bei einigen Vorgängen in Snowflake, z. B. CREATE OR REPLACE TABLE oder CLONE, kann das ursprüngliche Tabellenobjekt und der zugehörige Änderungsverlauf überschrieben werden. Dadurch werden vorhandene Datenübertragungen ungültig und es ist eine neue vollständige Synchronisierung erforderlich, um inkrementelle Übertragungen fortzusetzen.
  • Inkrementelle Übertragungen müssen häufig genug ausgeführt werden, um die Aufbewahrungsdauer für Daten von Snowflake für die Änderungsnachverfolgung einzuhalten. Wenn die letzte erfolgreiche Übertragung außerhalb dieses Zeitraums erfolgt ist, ist die nächste Übertragung eine vollständige Übertragung.

Inkrementelle Übertragungen konfigurieren

Sie können inkrementelle Übertragungen konfigurieren, indem Sie beim Einrichten einer Snowflake-Übertragung in der Übertragungskonfiguration die Schreibeinstellung Inkrementell auswählen.

Wenn Sie für die Datenübertragung die Option Inkrementell auswählen, können Sie die Datenübertragung mit den Schreibmodi Anhängen oder Upsert durchführen. Diese Modi definieren, wie Daten während einer inkrementellen Datenübertragung in BigQuery geschrieben werden. Wenn Sie den Schreibmodus Upsert aktivieren möchten, müssen Sie einen Primärschlüssel in einer benutzerdefinierten Schemadatei definieren. Wenn kein Primärschlüssel definiert ist, wird standardmäßig der Schreibmodus Append (Anhängen) verwendet. In den folgenden Abschnitten werden die verfügbaren Schreibmodi beschrieben.

Anhängemodus

Im Anhängen-Schreibmodus werden nur neue Zeilen in die Zieltabelle eingefügt. Mit dieser Option werden nur neue Zeilen aus der Quelltabelle entladen und übertragene Daten angehängt, ohne dass nach vorhandenen Datensätzen gesucht wird. In diesem Modus kann es also zu Datenduplizierungen in der Zieltabelle kommen.

Upsert-Schreibmodus

Im Upsert-Schreibmodus können Sie Datensätze in Ihrer Zieltabelle mithilfe eines Primärschlüssels aktualisieren, einfügen oder löschen. Wenn der angegebene Primärschlüssel in der BigQuery-Zieltabelle vorhanden ist, fügt der Snowflake-Connector Datensätze ein, aktualisiert oder löscht sie korrekt, um Änderungen zu berücksichtigen. Wenn der Primärschlüssel in der Zieltabelle nicht vorhanden ist, fügt der Connector neue Datensätze für Quelleneinfügungen oder ‑aktualisierungen ein. Löschvorgänge werden in diesem Fall übersprungen.

Wenn Sie den Upsert-Schreibmodus für die inkrementelle Datenübertragung verwenden möchten, müssen Sie Primärschlüssel in Ihrer benutzerdefinierten Schemadatei definieren. Beachten Sie bei der Auswahl eines Primärschlüssels Folgendes:

  • Der Primärschlüssel kann aus einer oder mehreren Spalten in Ihrer Tabelle bestehen, die für den Connector erforderlich sind, um zu aktualisierende Datensätze zu identifizieren.

  • Wählen Sie Spalten mit Nicht-Null-Werten aus, die in allen Zeilen der Tabelle eindeutig sind. Wir empfehlen Spalten mit systemgenerierten Kennungen, eindeutigen Referenzcodes (z. B. automatisch inkrementierenden IDs) oder unveränderlichen zeitbasierten Sequenz-IDs.

  • Um potenziellen Datenverlust oder Datenbeschädigung zu vermeiden, müssen die ausgewählten Primärschlüsselspalten eindeutige Werte enthalten. Wenn Sie Zweifel an der Eindeutigkeit der ausgewählten Primärschlüsselspalte haben, empfehlen wir stattdessen den Schreibmodus „Anhängen“ oder die vollständige Aufnahme.

Verhalten bei Schemaänderungen

Bei inkrementellen Übertragungen wird die Schemaentwicklung nicht unterstützt. Alle Änderungen am Quelltabellenschema, z. B. das Hinzufügen, Entfernen oder Umbenennen von Spalten oder das Ändern von Spaltendatentypen, führen dazu, dass nachfolgende inkrementelle Übertragungen fehlschlagen. Wenn sich das Quellschema ändert, müssen Sie eine vollständige Datenübertragung ausführen, um die Daten neu zu synchronisieren.

Benutzerdefinierte Schemadatei für inkrementelle Übertragungen

Sie können eine benutzerdefinierte Schemadatei verwenden, um Primärschlüssel für inkrementelle Übertragungen zu definieren und die Schemazuordnung anzupassen. Eine benutzerdefinierte Schemadatei ist eine JSON-Datei, die das Quell- und das Zielschema beschreibt.

Für inkrementelle Übertragungen im Upsert-Modus müssen Sie eine oder mehrere Spalten als Primärschlüssel angeben. Dazu müssen Sie die Spalten in der benutzerdefinierten Schemadatei mit dem Nutzungstyp PRIMARY_KEY annotieren.

Das folgende Beispiel zeigt eine benutzerdefinierte Schemadatei, in der O_ORDERKEY und O_ORDERDATE als Primärschlüssel für die Tabelle orders definiert sind:


{
  "databases": [
    {
      "name": "my_db",
      "originalName": "my_db",
      "tables": [
        {
          "name": "orders",
          "originalName": "orders",
          "columns": [
            {
              "name": "O_ORDERKEY",
              "originalName": "O_ORDERKEY",
              "usageType": [
                "PRIMARY_KEY"
              ]
            },
            {
              "name": "O_ORDERDATE",
              "originalName": "O_ORDERDATE",
              "usageType": [
                "PRIMARY_KEY"
              ]
            }
          ]
        }
      ]
    }
  ]
}

Änderungstracking aktivieren

Bevor Sie eine inkrementelle Snowflake-Übertragung einrichten können, müssen Sie das Änderungs-Tracking für jede Quelltabelle mit dem folgenden Befehl aktivieren:

ALTER TABLE DATABASE_NAME.SCHEMA_NAME.TABLE_NAME SET CHANGE_TRACKING = TRUE;

Wenn die Änderungsnachverfolgung für eine Tabelle nicht aktiviert ist, wird für diese Tabelle standardmäßig eine vollständige Datenübertragung durchgeführt.

Nächste Schritte

Nachdem Sie alle für eine inkrementelle Snowflake-Übertragung erforderlichen Schritte konfiguriert haben, können Sie inkrementelle Übertragungen für Ihre Snowflake-Übertragungskonfiguration aktivieren. Weitere Informationen finden Sie unter Snowflake-Übertragung einrichten.