Verwenden von Unveränderlichkeitseinschränkungen¶
Um Snowflake mitzuteilen, dass sich bestimmte Zeilen in einer dynamischen Tabelle nicht ändern werden, verwenden Sie die IMMUTABLE WHERE-Klausel in einer CREATE DYNAMIC TABLE- oder ALTER DYNAMIC TABLE-Anweisung.
Die Unveränderlichkeit beschleunigt Aktualisierungen, indem Zeilen übersprungen werden, die sich nicht ändern. Backfilling mit Unveränderlichkeit bietet sowohl sofortige als auch kontinuierliche Leistungsvorteile:
Erstmalige Erstellung: Backfilling kopiert historische Daten sofort ohne Computekosten. Dadurch sind Tabellen mit historischen Daten aus mehreren Jahren sofort verfügbar, anstatt teure Erstaktualisierungen zu erfordern.
Laufende Aktualisierungen: Unveränderlichkeitseinschränkungen schützen bei zukünftigen Aktualisierungen die aufgefüllten Daten vor einer erneuten Verarbeitung. Nur die veränderbare Region wird aktualisiert, sodass die Aktualisierungszeiten schnell bleiben, auch wenn die Tabelle wächst.
Informationen zum konzeptionellen Hintergrund finden Sie unter Erläuterungen zu Unveränderlichkeitseinschränkungen.
Grundlegende Beispiele¶
Beispiel: Verhindern von Neuberechnungen, wenn sich eine Dimensionstabelle ändert¶
Wenn Sie eine Zeile in einer Dimensionstabelle aktualisieren, verarbeiten Sie nur die Fakten aus dem veränderbaren Zeitraum erneut:
Beispiel: Behalten Sie Daten länger als die Quelltabelle bei¶
Erstellen Sie eine dynamische Tabelle, die geparste Daten länger aufbewahrt als die Staging-Tabelle, und löschen Sie alte Staging-Daten mit einer Aufgabe:
Beispiel: Erlauben Sie nachgelagerten Tabellen, eine inkrementelle Aktualisierung aus einer Tabelle mit vollständiger Aktualisierung zu verwenden¶
Einige Abfragekonstrukte (wie benutzerdefinierte Python-Tabellenfunktionen) erfordern den Modus der vollständigen Aktualisierung. Aufgrund von Unveränderlichkeitseinschränkungen können nachgelagerte Tabellen weiterhin die inkrementelle Aktualisierung verwenden:
Beispiele für Backfilling¶
Die folgenden Beispiele zeigen, wie Sie neue dynamische Tabellen aus Tabellen mit durch Backfilling aufgefüllten Daten erstellen können.
Die Backfilling-Tabelle muss übereinstimmende Spalten mit kompatiblen Datentypen in derselben Reihenfolge enthalten wie Ihre dynamische Tabelle. Snowflake kopiert keine Tabelleneigenschaften oder Berechtigungen aus der Backfilling-Tabelle.
Bei Angabe der Time Travel-Parameter AT | BEFORE kopiert Snowflake die Daten aus der Backfilling-Tabelle zum angegebenen Zeitpunkt.
Die folgenden Beschränkungen gelten, wenn Sie mit Unveränderlichkeitseinschränkungen und rückwirkend aufgefüllten Daten (Backfilling) arbeiten:
Derzeit können nur reguläre und dynamische Tabellen für das Backfilling verwendet werden.
Sie können in der neuen dynamischen Tabelle keine Richtlinien oder Tags angeben, da diese aus der Backfilling-Tabelle kopiert werden.
Die Gruppierungsschlüssel in der neuen dynamischen Tabelle und der Backfilling-Tabelle müssen identisch sein.
Beispiel: Backfilling aus einem Teil der Tabelle¶
Im folgenden Beispiel wird der unveränderlichen Bereich von my_dynamic_table aus my_backfill_table und der veränderliche Bereich aus der Definition der dynamischen Tabelle durch Backfilling aufgefüllt.
Wenn Sie diese dynamische Tabelle neu initialisieren:
Modus der inkrementellen Aktualisierung: Snowflake löscht alle veränderbaren Zeilen und füllt nur die veränderbare Region neu auf.
Modus der vollständigen Aktualisierung: Snowflake führt eine vollständige Aktualisierung mit demselben Effekt aus.
Beispiel: Verwenden von Backfilling zum Wiederherstellen oder Ändern von Daten in einer dynamischen Tabelle¶
Sie können die Daten oder die Definition einer dynamischen Tabelle nicht direkt bearbeiten. Um Daten wiederherzustellen oder zu korrigieren, führen Sie die folgenden Problemumgehungsschritte aus:
Klonen Sie die dynamische Tabelle in eine reguläre Tabelle.
Ändern Sie die geklonte Tabelle wie erforderlich.
Nehmen Sie ein Backfilling aus der bearbeiteten Tabelle in eine neue dynamische Tabelle vor.
Im folgenden Beispiel aggregiert my_dynamic_table tägliche Verkaufsdaten aus der Basistabelle sales:
Optional können Sie die alten Daten archivieren, um Speicherkosten zu sparen:
Später finden Sie einen Verkaufsfehler am 2025-05-01, wobei sales_count „2“ sein sollte. So korrigieren Sie dies:
Klonen Sie
my_dynamic_tablein einer regulären Tabelle:Aktualisieren Sie die geklonte Tabelle:
Erstellen Sie die dynamische Tabelle neu, indem Sie den bearbeiteten Klon als Backfilling-Quelle verwenden.
Mit dieser Methode können Sie Daten in einer dynamischen Tabelle wiederherstellen oder korrigieren, ohne die Basistabelle ändern zu müssen:
Beispiel: Ändern des Schemas einer dynamischen Tabelle mithilfe von Backfilling¶
Sie können das Schema einer dynamischen Tabelle nicht direkt ändern. Um das Schema zu aktualisieren, z. B. eine Spalte hinzuzufügen, gehen Sie wie folgt vor:
Klonen Sie die dynamische Tabelle in eine reguläre Tabelle. Im folgenden Beispiel wird
my_dynamic_tableverwendet, die aussaleserstellt wurde (zuvor).Ändern Sie das Schema der geklonten Tabelle:
Optional können Sie der neuen Spalte Daten hinzufügen.
Erstellen Sie die dynamische Tabelle neu, indem Sie den bearbeiteten Klon als Backfilling-Quelle verwenden.
Überprüfen Sie, ob die neue Spalte in der dynamischen Tabelle angezeigt wird:
Prüfen des Status der Unveränderlichkeit¶
Um zu prüfen, ob eine Zeile in einer dynamischen Tabelle veränderbar ist, fragen Sie die Spalte METADATA$IS_IMMUTABLE ab:
Um die Unveränderlichkeitseinschränkung für eine dynamische Tabelle anzuzeigen, führen Sie SHOW DYNAMIC TABLES aus, und überprüfen Sie die Spalte immutable_where.