Die Zielverzögerung dynamischer Tabellen verstehen¶
Die Aktualisierung einer dynamischen Tabelle wird durch die Zielverzögerung der Daten ausgelöst, die bestimmt, wie veraltet sie sein dürfen. Sie können eine feste Zielverzögerung festlegen oder die dynamische Tabelle auf DOWNSTREAM festlegen, sodass der Aktualisierungszeitpunkt von den dynamischen Tabellen abhängt, die von iht abhängen.
Die Zielverzögerung für eine dynamische Tabelle wird relativ zu den dynamischen Tabellen an der Wurzel des Diagramms gemessen, nicht zu den direkt vorgelagerten dynamischen Tabellen. Das Diagramm der Tabellen, die mit Ihrer dynamischen Tabelle verbunden sind, finden Sie unter Diagramm der Tabellen anzeigen, die mit Ihren dynamischen Tabellen verbunden sind.
Snowflake plant die Aktualisierungen so, dass die tatsächliche Verzögerung Ihrer dynamischen Tabellen unter der Zielverzögerung bleibt. Die Dauer der einzelnen Aktualisierungen hängt von der Abfrage, dem Datenmuster und der Warehouse-Größe ab. Berücksichtigen Sie bei der Wahl der Zielverzögerung die Zeit, die benötigt wird, um jede dynamische Tabelle in einer Kette bis zur Root zu aktualisieren. Wenn Sie dies nicht tun, werden möglicherweise einige Aktualisierungen übersprungen, was zu einer höheren tatsächlichen Verzögerung führt.
Arten von Zielverzögerung¶
Sie geben die Zielverzögerung auf eine der folgenden Arten an. Die Zielverzögerung ist umgekehrt proportional zur Aktualisierungshäufigkeit der dynamischen Tabelle: häufige Aktualisierungen bedeuten eine geringere Verzögerung.
Measure der Aktualität: Definiert die maximale Zeitspanne, die der Inhalt der dynamischen Tabelle hinter den Aktualisierungen der Basistabellen zurückbleiben darf.
Im folgenden Beispiel wird
my_dynamic_tableso eingestellt, dass sie jede Stunde aktualisiert wird und ihre Aktualität behält:ALTER DYNAMIC TABLE my_dynamic_table SET TARGET_LAG = '1 hour';
Downstream: Gibt an, dass die dynamische Tabelle bei Bedarf aktualisiert werden soll, wenn nachgelagerte Tabellen (Tabellen, die von dieser Tabelle abhängen) aktualisiert werden. Diese Aktualisierung kann durch eine Initialisierung bei der Erstellung, manuelle Aktualisierung oder geplante Aktualisierung einer nachgelagerten Tabelle erfolgen.
Wenn
refresh_modeaufdownstreamfestgelegt ist, wird der Aktualisierungszeitplan einer dynamischen Tabelle von der anspruchsvollsten (kürzesten) Verzögerung der nachgelagerten Abhängigkeiten bestimmt. Wenn beispielsweise eine nachgelagerte abhängige Tabelle Daten benötigt, die nicht älter als 10 Minuten sind, und eine andere nachgelagerte abhängige Tabelle Daten benötigt, die nicht älter als 1 Stunde sind, wird der Aktualisierungszeitplan dieser dynamischen Tabelle auf 10 Minuten festgelegt, da dies die geringste Verzögerung der nachgelagerten abhängigen Tabellen ist.Im folgenden Beispiel wird
my_dynamic_tableso eingestellt, dass die Aktualisierung auf der Grundlage der Zielverzögerung der nachgelagerten dynamischen Tabellen erfolgt. Wennmy_dynamic_tablekeine dynamischen Tabellen hat, die von ihr abhängig sind, wird sie nicht aktualisiert.ALTER DYNAMIC TABLE my_dynamic_table SET TARGET_LAG = DOWNSTREAM;
Weitere Beispiele für nachgelagerte Zielverzögerungen finden Sie unter Beispiel: Zielverzögerung für dynamische Tabellenketten.
Wie Snowflake Aktualisierungen plant¶
Snowflake plant Aktualisierungen etwas früher als die Zielverzögerung, um Zeit für den Abschluss der Aktualisierung zu haben. Wenn Sie beispielsweise die Zielverzögerung auf 5 Minuten festlegen, wird die Tabelle möglicherweise häufiger als alle 5 Minuten aktualisiert. Die tatsächlichen Aktualisierungsintervalle sind häufig kürzer als die angegebene Verzögerung.
Bemerkung
Eine Zielverzögerung ist ein Ziel, keine Garantie. Snowflake versucht, die Daten innerhalb der Zielverzögerung zu halten, aber die tatsächliche Verzögerung kann das Ziel aufgrund von Faktoren wie der Größe des Warehouses, des Datenvolumens und der Komplexität der Abfrage überschreiten.
Eine Anleitung zum Anpassen der Zielverzögerung für Ihre Workload finden Sie unter Warehouse oder der Zielverzögerungszeit für dynamische Tabellen ändern. Informationen zur Optimierung der Zielverzögerung finden Sie unter Identifizieren der richtigen Zielverzögerung.
Einfluss von vor- und nachgelagerten Beziehungen auf die Zielverzögerung¶
Die folgende Abbildung illustriert die Operationen für das Anhalten, Fortsetzen und manuelle Aktualisieren im Kontext der vor- und nachgelagerten Beziehungen zu anderen dynamischen Tabellen.
Die Abbildung zeigt eine einfache deklarative Datenpipeline, die mit dynamischen Tabellen aufgebaut ist:
DT2wird als nachgelagert vonDT1beschrieben, da sie von dieser dynamischen Tabelle abhängt, und als vorgelagert vonDT3, die von ihr abhängig ist.DT3befindet sich stromabwärts, also nachgelagert vonDT2als auch vonDT1, da sie direkt vonDT2und indirekt vonDT1abhängt.DT1befindet sich stromaufwärts gegenüber den anderen dynamischen Tabellen, ist ihnen also direkt oder indirekt vorgelagert.
Beispiel: Zielverzögerung für dynamische Tabellenketten¶
Betrachten Sie das folgende Beispiel, bei dem eine dynamische Tabelle (DT2) aus einer anderen dynamischen Tabelle (DT1) liest, um ihren Inhalt zu materialisieren. In diesem Szenario verarbeitet ein Bericht die Daten von DT2 über eine Abfrage.
Die folgenden Ergebnisse sind möglich, je nachdem, wie jede dynamische Tabelle ihre Verzögerung angibt:
|
|
Ergebnisse der Aktualisierung |
|---|---|---|
|
|
|
|
|
Dieses Szenario sollte vermieden werden. Die Berichtsabfrage wird keine Daten erhalten. DT1 wird häufig aktualisiert und |
|
|
|
|
|
Weder |