Die Zielverzögerung dynamischer Tabellen verstehen

Die Aktualisierung dynamischer Tabellen wird durch die Zielverzögerung der Daten ausgelöst, die bestimmt, wie veraltet die Daten sein dürfen. Sie können eine feste Zielverzögerung festlegen oder die dynamische Tabelle auf DOWNSTREAM setzen, sodass ihre Aktualisierungszeit von anderen dynamischen Tabellen abhängt, die von ihr abhängig sind.

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.

Bemerkung

Eine Zielverzögerung ist keine Garantie. Stattdessen ist es ein Ziel, das Snowflake zu erreichen versucht. Die Daten in dynamischen Tabellen werden innerhalb der Zielverzögerung so genau wie möglich aktualisiert. Die Zielverzögerung kann jedoch aufgrund von Faktoren wie der Größe des Warehouses, des Datenumfangs, der Komplexität der Abfrage und ähnlichen Faktoren überschritten werden.

Arten von Zielverzögerung

Die Zielverzögerung wird auf eine der folgenden Arten angegeben. 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. Nachgelagert: Gibt an, dass die dynamische Tabelle bei Bedarf aktualisiert werden soll, wenn andere abhängige dynamische Tabellen aktualisiert werden. Diese Aktualisierung kann durch Initialisierung bei der Erstellung, manuelle Aktualisierung oder geplante Aktualisierung einer nachgelagerten dynamischen Tabelle ausgelöst werden.

    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

Optimale Zielverzögerung einer dynamischen Tabelle bestimmen

Die von Ihnen festgelegte Zielverzögerung beeinflusst die Häufigkeit der geplanten Aktualisierungen Ihrer dynamischen Tabelle.

Snowflake plant Aktualisierungen etwas früher, um Zeit für den Abschluss der Aktualisierung zu haben. Wenn Sie z. B. die Zielverzögerung auf 5 Minuten einstellen, bedeutet das nicht, dass die Tabelle genau alle 5 Minuten aktualisiert wird. Die tatsächlichen Aktualisierungsintervalle können kürzer sein als die angegebene Verzögerung. Wenn Sie konsistentere 5-Minuten-Aktualisierungen wünschen, sollten Sie eine leichte Erhöhung der Zielverzögerung in Betracht ziehen.

Sie können entweder die Tabellenfunktion DYNAMIC_TABLE_REFRESH_HISTORY in INFORMATION_SCHEMA oder Snowsight verwenden, um die optimale Zielverzögerungszeit für Ihre Anforderungen zu bestimmen. Analysieren Sie zum Beispiel die Aktualisierungsdetails, einschließlich Dauer und übersprungenen Aktualisierungen, um eine fundierte Entscheidung zu treffen.

Informationen zur Überwachung der Aktualisierung dynamischer Tabellen und zur Problembehandlung finden Sie unter Dynamische Tabellen überwachen und Diagnose häufiger Probleme bei der Automatisierung dynamischer Tabellen.

Die Funktion DYNAMIC_TABLE_REFRESH_HISTORY gibt Informationen über jede Aktualisierung einer dynamischen Tabelle zurück, einschließlich der Zeit, die für die Aktualisierung benötigt wurde, und welche Aktualisierungen übersprungen wurden.

SELECT
    name
FROM
  TABLE (
    INFORMATION_SCHEMA.DYNAMIC_TABLE_REFRESH_HISTORY (
      NAME_PREFIX => 'MYDB.MYSCHEMA.', ERROR_ONLY => TRUE
    )
  );
Copy

Die Ausgabe spiegelt die Aktualisierungen im Laufe der Zeit wider. Jede Zeile steht für eine Aktualisierung. Jedes Mal, wenn die dynamische Tabelle aktualisiert wird, wird eine neue Zeile hinzugefügt.

Zielverzögerung ändern

Möglicherweise möchten Sie die Zielverzögerung für eine dynamische Tabelle aus einem der folgenden Gründe anpassen:

  • Sie benötigen aktuellere Daten. Durch die Verringerung der Zielverzögerung wird sichergestellt, dass die dynamische Tabelle häufiger aktualisiert wird, sodass aktuellere Daten nahezu in Echtzeit bereitgestellt werden.

  • Sie möchten Ihre Ressourcen optimieren. Eine Erhöhung der Zielverzögerung kann die Häufigkeit der Aktualisierungen verringern und damit Computeressourcen einsparen, was für Workloads nützlich ist, die keine ständigen Aktualisierungen benötigen oder bei denen sich die Daten nur selten ändern. Wenn zum Beispiel eine dynamische Tabelle alle 20 Minuten aktualisiert wird, aber nur innerhalb einer Stunde mit den Quelltabellen übereinstimmen muss, kann die Festlegung einer einstündigen Zielverzögerung die Kosten senken.

  • Sie möchten, dass die Zielverzögerung mit der Datenpipeline übereinstimmt. Wenn Ihre dynamische Tabelle von anderen Tabellen abhängt, die längere Aktualisierungsintervalle haben, stellt die Anpassung der Zielverzögerung sicher, dass sie mit den Abhängigkeiten übereinstimmt.

Um die Zielverzögerung zu ändern, verwenden Sie den Befehl ALTER DYNAMIC TABLE. Weitere Informationen dazu finden Sie unter Warehouse oder der Zielverzögerungszeit für dynamische Tabellen ändern.

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.