Erläuterungen zu Unveränderlichkeitseinschränkungen¶
Mit Unveränderlichkeitseinschränkungen können Sie Teile einer dynamischen Tabelle als statisch markieren. Wenn Sie eine Unveränderlichkeitseinschränkung definieren, überspringt Snowflake diese Zeilen bei der Aktualisierung, was die Leistung verbessert, insbesondere bei Tabellen, die große Mengen historischer Daten enthalten.
Unveränderlichkeitseinschränkungen definieren Sie mit der IMMUTABLE WHERE-Klausel, wenn Sie eine dynamische Tabelle erstellen oder ändern. Die Klausel gibt eine Bedingung oder ein Prädikat an, das angibt, welche Zeilen unveränderlich sind.
Wichtige Verhaltensweisen:
Erstmalige Aktualisierung: Snowflake ignoriert das IMMUTABLE WHERE-Prädikat bei der ersten Aktualisierung, dieses gilt aber für alle nachfolgenden Aktualisierungen.
Modus der vollständigen Aktualisierung: Das Prädikat beschränkt die Neuberechnung auf die Zeilen, die die Bedingung nicht erfüllen.
Inkrementelle Aktualisierung: Streams und dynamische Tabellen mit inkrementeller Aktualisierung können aus dynamischen Tabellen mit vollständiger Aktualisierung lesen, für die Unveränderlichkeitseinschränkungen gelten.
Klonen und Replizieren: Snowflake kopiert IMMUTABLE WHERE-Einschränkungen ohne Beschränkungen.
Weitere Informationen zu Computekosten finden Sie unter Computekosten für Unveränderlichkeitseinschränkungen.
Wann Unveränderlichkeitseinschränkungen verwendet werden sollten¶
Unveränderlichkeitseinschränkungen sind in den folgenden Szenarien nützlich:
- Vermeiden der Neuverarbeitung historischer Daten
Wenn Ihre dynamische Tabelle historische Daten enthält, die Sie nicht erneut verarbeiten möchten, markieren Sie ältere Zeilen als unveränderlich.
- Optimieren des Modus der vollständigen Aktualisierung
Dynamische Tabellen, die den Modus der vollständigen Aktualisierung verwenden, berechnen normalerweise alle Zeilen bei jeder Aktualisierung neu. Unveränderlichkeitseinschränkungen beschränken die Neuberechnung auf die veränderbaren Zeilen, was den Aufwand erheblich reduziert, wenn die meisten Daten historische Daten sind.
- Erleichterung von inkrementellen nachgelagerten Aktualisierungen
Einige Abfragekonstrukte, wie z. B. benutzerdefinierte Python-Tabellenfunktionen, erfordern, dass die dynamische Tabelle im Modus der vollständigen Aktualisierung ausgeführt wird. Normalerweise verhindert dies, dass nachgelagerte Tabellen von der inkrementellen Aktualisierung profitieren. Wenn die vorgelagerte Tabelle Unveränderlichkeitseinschränkungen unterliegt, können nachgelagerte Tabellen immer noch von einer inkrementellen Verarbeitung profitieren.
Verwenden von Backfilling mit Unveränderlichkeit¶
Backfilling erweitert Unveränderlichkeitseinschränkungen. Backfilling ist eine Nullkopie-Operation, mit der Sie vorhandene Daten sofort in eine dynamische Tabelle kopieren können, ohne sie neu berechnen zu müssen. Verwenden Sie es, um bestehende Pipelines zu migrieren, die Definitionen dynamischer Tabellen zu ändern oder eine teure Initialisierung zu vermeiden, wenn Sie Tabellen mit historischen Daten aus mehreren Jahren erstellen.
Rückwirkend aufgefüllte Daten können sich bei zukünftigen Aktualisierungen nicht ändern.
Wenn Sie eine dynamische Tabelle mit sowohl IMMUTABLE WHERE als auch BACKFILL FROM erstellen:
Beim Backfilling wird der unveränderliche Bereich aus der Quelltabelle kopiert. Der unveränderliche Bereich besteht aus Zeilen, die mit der
IMMUTABLE WHERE-Bedingung übereinstimmen.Die Abfragedefinition berechnet den veränderbaren Bereich. Der veränderbare Bereich besteht aus Zeilen, die nicht der Bedingung entsprechen.
Nächste Schritte¶
Implementierungsanleitungen und Beispiele finden Sie unter Beispiele für Backfilling und Unveränderlichkeitseinschränkungen.