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.

Einschränkungen bei inkrementellen Übertragungen

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.

Verhalten bei der Datenaufnahme

Sie können angeben, wie Daten in BigQuery geladen werden, indem Sie in der Übertragungskonfiguration entweder die Schreibeinstellung Vollständig oder Inkrementell auswählen, wenn Sie eine Snowflake-Übertragung einrichten. Inkrementelle Übertragungen werden in der Vorschau unterstützt.

Sie können eine vollständige Datenübertragung konfigurieren, um alle Daten aus Ihren Snowflake-Datasets bei jeder Datenübertragung zu übertragen.

Alternativ können Sie eine inkrementelle Datenübertragung (Vorabversion) konfigurieren, um nur Daten zu übertragen, die sich seit der letzten Datenübertragung geändert haben. So müssen Sie nicht bei jeder Datenübertragung das gesamte Dataset laden. Wenn Sie für die Datenübertragung Inkrementell auswählen, müssen Sie entweder den Schreibmodus Anhängen oder Upsert angeben, um festzulegen, wie Daten während einer inkrementellen Datenübertragung in BigQuery geschrieben werden. 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. Bei dieser Option werden übertragene Daten nur angehängt, ohne dass nach vorhandenen Datensätzen gesucht wird. Daher kann es in der Zieltabelle zu Datenduplizierungen kommen.

Wenn Sie den Modus „Append“ auswählen, müssen Sie eine Watermark-Spalte auswählen. Für den Snowflake-Connector ist eine Wasserzeichenspalte erforderlich, um Änderungen in der Quelltabelle zu verfolgen.

Für Snowflake-Übertragungen empfehlen wir, eine Spalte auszuwählen, die nur beim Erstellen des Datensatzes aktualisiert wird und sich bei nachfolgenden Aktualisierungen nicht ändert. Zum Beispiel die Spalte CREATED_AT.

Upsert-Schreibmodus

Im Upsert-Schreibmodus wird entweder eine Zeile aktualisiert oder eine neue Zeile in die Zieltabelle eingefügt, indem nach einem Primärschlüssel gesucht wird. Sie können einen Primärschlüssel angeben, damit der Snowflake-Connector ermitteln kann, welche Änderungen erforderlich sind, um die Zieltabelle auf dem neuesten Stand der Quelltabelle zu halten. Wenn der angegebene Primärschlüssel während einer Datenübertragung in der BigQuery-Zieltabelle vorhanden ist, aktualisiert der Snowflake-Connector diese Zeile mit neuen Daten aus der Quelltabelle. Wenn bei einer Datenübertragung kein Primärschlüssel vorhanden ist, fügt der Snowflake-Connector eine neue Zeile ein.

Wenn Sie den Upsert-Modus auswählen, müssen Sie eine Watermark-Spalte und einen Primärschlüssel auswählen:

  • Für den Snowflake-Connector ist eine Wasserzeichenspalte erforderlich, um Änderungen in der Quelltabelle zu verfolgen.
    • Wählen Sie eine Wasserzeichenspalte aus, die jedes Mal aktualisiert wird, wenn eine Zeile geändert wird. Wir empfehlen Spalten, die der Spalte UPDATED_AT oder LAST_MODIFIED ähneln.
  • Der Primärschlüssel kann aus einer oder mehreren Spalten in Ihrer Tabelle bestehen, die vom Snowflake-Connector benötigt werden, um zu ermitteln, ob eine Zeile eingefügt oder aktualisiert werden muss.

    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 von Ihnen 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 „Append“ zu verwenden.

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.

Inkrementelles Aufnahmeverhalten

Wenn Sie Änderungen am Tabellenschema in Ihrer Datenquelle vornehmen, werden inkrementelle Datenübertragungen aus diesen Tabellen in BigQuery auf folgende Weise berücksichtigt:

Änderungen an der Datenquelle Inkrementelles Aufnahmeverhalten
Neue Spalte hinzufügen Der BigQuery-Zieltabelle wird eine neue Spalte hinzugefügt. Alle vorherigen Datensätze für diese Spalte haben Nullwerte.
Spalte löschen Die gelöschte Spalte verbleibt in der BigQuery-Zieltabelle. Neue Einträge in dieser gelöschten Spalte werden mit Nullwerten gefüllt.
Datentyp einer Spalte ändern Der Connector unterstützt nur Datentypkonvertierungen, die von der ALTER COLUMN-DDL-Anweisung unterstützt werden. Bei allen anderen Datentypkonvertierungen schlägt die Datenübertragung fehl.

Wenn Probleme auftreten, empfehlen wir, eine neue Übertragungskonfiguration zu erstellen.

Spalte umbenennen Die ursprüngliche Spalte bleibt in der BigQuery-Zieltabelle unverändert, während der Zieltabelle eine neue Spalte mit dem aktualisierten Namen hinzugefügt wird.

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.