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.

  1. 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_table so eingestellt, dass sie jede Stunde aktualisiert wird und ihre Aktualität behält:

    ALTER DYNAMIC TABLE my_dynamic_table SET TARGET_LAG = '1 hour';
    
    Copy
  2. 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_mode auf downstream festgelegt 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_table so eingestellt, dass die Aktualisierung auf der Grundlage der Zielverzögerung der nachgelagerten dynamischen Tabellen erfolgt. Wenn my_dynamic_table keine dynamischen Tabellen hat, die von ihr abhängig sind, wird sie nicht aktualisiert.

    ALTER DYNAMIC TABLE my_dynamic_table SET TARGET_LAG = DOWNSTREAM;
    
    Copy

    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.

Beziehung zwischen dynamischen Tabellen. Dient zur Erläuterung von Anhalten, Fortsetzen und manueller Aktualisierung.

Die Abbildung zeigt eine einfache deklarative Datenpipeline, die mit dynamischen Tabellen aufgebaut ist:

  • DT2 wird als nachgelagert von DT1 beschrieben, da sie von dieser dynamischen Tabelle abhängt, und als vorgelagert von DT3, die von ihr abhängig ist.

  • DT3 befindet sich stromabwärts, also nachgelagert von DT2 als auch von DT1, da sie direkt von DT2 und indirekt von DT1 abhängt.

  • DT1 befindet 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.

Einfaches Beispiel mit zwei dynamischen Tabellen: DT2, die auf Grundlage von DT1 definiert ist.

Die folgenden Ergebnisse sind möglich, je nachdem, wie jede dynamische Tabelle ihre Verzögerung angibt:

DT1

DT2

Ergebnisse der Aktualisierung

TARGET_LAG = DOWNSTREAM

TARGET_LAG = 10minutes

DT2 wird mindestens alle 10 Minuten aktualisiert. DT1 leitet seine Verzögerung von DT2 ab und wird jedes Mal aktualisiert, wenn DT2 Aktualisierungen benötigt.

TARGET_LAG = 10minutes

TARGET_LAG = DOWNSTREAM

Dieses Szenario sollte vermieden werden. Die Berichtsabfrage wird keine Daten erhalten. DT1 wird häufig aktualisiert und DT2 wird nicht aktualisiert, da es keine dynamische Tabelle gibt, die auf DT2 basiert.

TARGET_LAG = 5minutes

TARGET_LAG = 10minutes

DT2 wird etwa alle 10 Minuten mit Daten von DT1 aktualisiert, die höchstens 5 Minuten alt sind.

TARGET_LAG = DOWNSTREAM

TARGET_LAG = DOWNSTREAM

Weder DT1 noch DT2 werden in regelmäßigen Abständen aktualisiert, da beide eine nachgelagerte Verzögerung haben und keine von ihnen einen nachgelagerten Verbraucher mit einer definierten Verzögerung hat.