Problembehandlung bei dynamischen Tabellen

Unter diesem Thema werden Lösungen für die Problembehandlung bei dynamischen Tabellen vorgestellt, die nicht wie erwartet funktionieren:

Einige Aktionen können eingeschränkt sein, einerseits aufgrund von Beschränkungen bei der Verwendung dynamischer Tabellen und andererseits, weil Sie nicht über die erforderlichen Berechtigungen verfügen. Weitere Informationen dazu finden Sie unter Bekannte Einschränkungen für dynamische Tabellen und Zugriffssteuerung für dynamische Tabellen.

Weitere Informationen zu den Kosten dynamischer Tabellen finden Sie unter Erläuterungen zu den Kosten von dynamischen Tabellen.

Wenn Sie ein Problem feststellen, das hier nicht aufgeführt ist, wenden Sie sich an den Snowflake-Support.

Probleme bei der Aktualisierung dynamischer Tabellen lösen

Problem

Lösung

Meine dynamische Tabelle verwendet eine vollständige Aktualisierung anstelle einer inkrementellen Aktualisierung.

Der tatsächliche Aktualisierungsmodus einer dynamischen Tabelle wird zum Zeitpunkt der Erstellung festgelegt und ist danach unveränderlich. Wenn nicht explizit angegeben, ist der Aktualisierungsmodus standardmäßig auf AUTO eingestellt, wodurch der Aktualisierungsmodus auf der Grundlage verschiedener Faktoren wie der Abfragekomplexität oder nicht unterstützter Konstrukte, Operatoren oder Funktionen ausgewählt wird.

Um eine konsistente Verhaltensweise in allen Snowflake-Releases zu gewährleisten, legen Sie Aktualisierungsmodus aller dynamischen Tabellen explizit fest. Wenn Sie z. B. möchten, dass Ihre dynamischen Tabellen nur inkrementell aktualisiert werden, müssen Sie den Aktualisierungsmodus beim Erstellen der Tabellen explizit auf INCREMENTAL festlegen und dabei bedenken, dass es einige Beschränkungen bei der Verwendung der inkrementellen Aktualisierung geben kann. Weitere Informationen dazu finden Sie unter Aktualisierungsmodus für alle dynamischen Tabellen in der Produktionsumgebung festlegen.

Wenn Sie eine Rolle mit den erforderlichen Berechtigungen verwenden, können Sie den Aktualisierungsmodus mit einer der folgenden Methoden überprüfen:

  • Mit SQL: Führen Sie die SHOW DYNAMIC TABLES-Anweisung aus: In der Ausgabe zeigt die Spalte text den vom Benutzer angegebenen Aktualisierungsmodus, die Spalte refresh_mode den tatsächlichen Aktualisierungsmodus und die Spalte refresh_mode_reason zeigt, warum der tatsächliche Aktualisierungsmodus gewählt wurde.

  • Mit Snowsight: Wählen Sie im Navigationsmenü Monitoring » Dynamic Tables aus, und wählen Sie dann Ihre dynamische Tabelle aus. Sie können den Aktualisierungsmodus für die dynamische Tabelle auf der Registerkarte Table Details einsehen.

Die inkrementelle Aktualisierung meiner dynamischen Tabelle ist langsam.

Die Aktualisierungsleistung einer dynamischen Tabelle hängt von bestimmten Annahmen über den Workload oder die Daten ab, die verarbeitet werden.

Verwenden Sie Refresh History, um die Varianz zu sehen oder Ausreißer zu erkennen:

  1. Melden Sie sich bei Snowsight an.

  2. Navigieren Sie zu Monitoring » Dynamic Tables.

  3. Wählen Sie Ihre dynamische Tabelle aus, und gehen Sie auf die Registerkarte Refresh History.

  4. Verwenden Sie zur Fehlersuche die Aktualisierungsdauer Ihrer dynamischen Tabelle über die letzten 24 Stunden.

Meine dynamische Tabelle führt eine leere Aktualisierung durch, aber ich sehe Kosten.

Aktualisierungen, die keine neuen Nettozeilen erzeugen (d. h. keine hinzugefügten, aktualisierten oder gelöschten Zeilen), verbrauchen Warehouse-Ressourcen, wenn sie mit Änderungen in einem der Upstream-Objekte verbunden sind, auf die die dynamische Tabelle verweist.

Wenn zum Beispiel das zugehörige virtuelle Warehouse angehalten wird und keine Änderungen an den Basisobjekten festgestellt werden, wird das angehaltene virtuelle Warehouse nicht wieder fortgesetzt und es werden keine Credits verbraucht. Dies wird als NO_DATA-Aktualisierung bezeichnet. Werden hingegen Änderungen festgestellt, wird das virtuelle Warehouse automatisch fortgesetzt, um die Aktualisierungen zu verarbeiten, was Warehouse-Ressourcen verbraucht, selbst wenn das Nettoergebnis null Zeilen für die dynamische Tabelle ist.

Wenn Sie Kosten sehen, aber keine Änderungen an Ihrer dynamischen Tabelle vorgenommen haben, könnte das an einer Änderung in Ihrer Quelltabelle liegen. Auf der Registerkarte Refresh History in Snowsight können Sie überprüfen, ob virtuelle Warehouses Credits verbraucht haben:

  1. Melden Sie sich bei Snowsight an.

  2. Wählen Sie im Navigationsmenü die Option Monitoring » Dynamic Tables aus.

  3. Wählen Sie Ihre dynamische Tabelle aus, und gehen Sie auf die Registerkarte Refresh History.

  4. Aktivieren Sie das Kontrollkästchen Warehouse used only, um die Aktualisierungen anzuzeigen, die auf das Warehouse angewendet wurden.

Weitere Informationen dazu finden Sie unter Erläuterungen zu den Kosten von dynamischen Tabellen.

Meine dynamische Tabelle hat eine Aktualisierung übersprungen.

Dynamische Tabellen werden nach einem Zeitplan aktualisiert. Wenn eine geplante Aktualisierung beginnt, kann es in den folgenden Situationen dazu kommen, dass die Aktualisierung übersprungen wird:

  • Wenn der dynamischen Tabelle, die aktualisiert wird, eine andere dynamische Tabelle vorgelagert ist und die Aktualisierung für die vorgelagerte Tabelle fehlgeschlagen ist oder übersprungen wurde.

  • Wenn eine vorherige Aktualisierung für die dynamische Tabelle noch nicht abgeschlossen ist.

  • Wenn die Aktualisierung der dynamischen Tabelle oft länger dauert als die Zielverzögerung, überspringt Snowflake möglicherweise eine Aktualisierung, um die Rate zukünftiger Auslassungen zu reduzieren.

Manuelle Aktualisierungen werden nie übersprungen, aber sie können dazu führen, dass andere Aktualisierungen übersprungen werden, insbesondere wenn Sie häufige manuelle Aktualisierungen einer dynamischen Tabelle vornehmen. Dies kann dazu führen, dass nachgelagerte dynamische Tabellen nicht mehr aktualisiert werden. Aus diesem Grund empfiehlt Snowflake nicht, häufig manuelle Aktualisierungen einer dynamischen Tabelle mit nachgelagerten dynamischen Tabellen durchzuführen, von denen erwartet wird, dass sie gemäß der Zielverzögerung aktualisiert werden.

Die Aktualisierung meiner dynamischen Tabelle ist fehlgeschlagen.

Wie eine normale Snowflake-Abfrage kann auch die Aktualisierung einer dynamischen Tabellen aufgrund von Problemen mit der Abfragedefinition der dynamischen Tabelle, den Eingabedaten (z. B. Parsing-Fehler) oder internen Systemproblemen fehlschlagen.

Um festzustellen, warum die Aktualisierung fehlgeschlagen ist, gehen Sie wie folgt vor:

  1. Melden Sie sich bei Snowsight an.

  2. Wählen Sie im Navigationsmenü die Option Monitoring » Dynamic Tables aus.

  3. Wählen Sie Ihre dynamische Tabelle aus, und gehen Sie auf die Registerkarte Table Details.

  4. Bewegen Sie unter Details den Mauszeiger über Last Completed Refresh. Ein Dialogfeld mit dem Fehlercode und der Meldung für die fehlgeschlagene Aktualisierung wird angezeigt.

Wenn die Aktualisierung aufgrund eines upstream_failed-Fehlercodes fehlgeschlagen ist, liegt dies möglicherweise daran, dass eine der vorgelagerten dynamischen Tabellen ein Problem hat. So stellen Sie fest, welche Upstream-Tabelle den Fehler verursacht hat:

  1. Wählen Sie im Snowsight-Navigationsmenü die Option Monitoring » Dynamic Tables aus, und wählen Sie dann Ihre dynamische Tabelle aus.

  2. Öffnen Sie die Seite Graph, um den Task-Graph-Verlauf Ihrer dynamischen Tabelle anzuzeigen.

  3. Wählen Sie aus dem Task-Graphen die vorgelagerte dynamische Tabelle aus, die rot ist, und überprüfen Sie unter Refresh History deren Aktualisierungshistorie.

Meine dynamische Tabelle wird neu initialisiert.

Ihre dynamische Tabelle wird möglicherweise aus einem der folgenden Gründe neu initialisiert:

  • Eine oder mehrere der Eingaben der dynamischen Tabelle werden ersetzt. Wenn Ihre dynamische Tabelle z. B. in einer Ansicht definiert ist und Sie die Ansicht ersetzen, muss die dynamische Tabelle neu initialisiert werden.

  • Wenn sich das Schema der Eingaben geändert hat und Ihre dynamische Tabelle sich auf die geänderten Spalten stützt.

  • Datenzugriffsrichtlinien werden zu den Eingaben der dynamischen Tabelle hinzugefügt, entfernt oder geändert.

  • Geklonte inkrementelle dynamische Tabellen müssen bei ihrer ersten Aktualisierung nach dem Erstellen neu initialisiert werden.

  • Replizierte dynamische Tabellen mit inkrementeller Aktualisierung werden nach dem Failover neu initialisiert, bevor die inkrementelle Aktualisierung fortgesetzt wird.

Allgemeine Informationen zur Initialisierung finden Sie unter Erläuterungen zur Initialisierung dynamischer Tabellen.

Probleme beim Erstellen dynamischer Tabellen lösen

Problem

Lösung

Das Erstellen meiner dynamischen Tabelle dauert sehr lange.

Wenn Sie eine dynamische Tabelle mit einer CREATE DYNAMIC TABLE-Anweisung erstellen, erfolgt ihre erstmalige Aktualisierung entweder zu einem geplanten Zeitpunkt (ON_SCHEDULE) oder synchron bei der Erstellung (ON_CREATE). Die erstmalige Datenbefüllung oder Initialisierung hängt davon ab, wann diese erste Aktualisierung stattfindet. So löst die synchrone Initialisierung beispielsweise eine Aktualisierung aller referenzierten vorgelagerten dynamischen Tabellen aus, was zusätzliche Verarbeitungszeit zur Gesamtdauer der Initialisierung hinzufügen kann.

Die Initialisierung kann einige Zeit dauern, je nachdem, wie viele Daten gescannt werden. Um den Fortschritt zu sehen, gehen Sie wie folgt vor:

  1. Melden Sie sich bei Snowsight an.

  2. Wählen Sie im Navigationsmenü die Option Monitoring » Query History aus.

  3. In der Dropdown-Liste Filters geben Sie CREATE DYNAMIC TABLE als SQL Text-Filter und Ihren Warehouse-Namen als Warehouse-Filter ein.

  4. Wählen Sie unter SQL text die Abfrage mit Ihrer dynamischen Tabelle aus, und verwenden Sie die Registerkarten Query Details und Query Profile, um den Fortschritt zu verfolgen.

Allgemeine Informationen zur Initialisierung finden Sie unter Erläuterungen zur Initialisierung dynamischer Tabellen.

Dynamische Tabellen debuggen

Problem

Lösung

Ich kann die Metadaten für meine dynamische Tabelle nicht sehen.

Um die Metadaten und das Information Schema einer dynamischen Tabelle anzuzeigen, müssen Sie eine Rolle verwenden, die über die Berechtigung MONITOR für diese dynamische Tabelle verfügt. Weitere Informationen dazu finden Sie unter Berechtigung zum Anzeigen der Metadaten einer dynamischen Tabelle.

Meine dynamische Tabelle wurde ausgesetzt.

Eine dynamische Tabelle kann aus verschiedenen Gründen ausgesetzt werden:

  • Sie wurde direkt mit dem Befehl ALTER DYNAMIC TABLE … SUSPEND ausgesetzt.

  • Sie ist einer ausgesetzten dynamischen Tabelle nachgelagert.

  • Die Aktualisierung ist fünfmal hintereinander fehlgeschlagen (Auslassungen zählen nicht dazu).

  • Es handelt sich um eine replizierte dynamische Tabelle, entweder in einer Replikationsgruppe oder einer Failover-Gruppe. Siehe Replikation und dynamische Tabellen.

  • Sie wurde aus einer dynamischen Tabelle geklont, bei der eine oder mehrere Basistabellen zum Zeitpunkt des Klonens gelöscht wurden.

Um den Grund zu erfahren, warum Ihre dynamische Tabelle ausgesetzt wurde, gehen Sie wie folgt vor:

  1. Melden Sie sich bei Snowsight an.

  2. Wählen Sie im Navigationsmenü die Option Monitoring » Dynamic Tables aus.

  3. Wählen Sie Ihre dynamische Tabelle aus, und gehen Sie auf die Registerkarte Table Details.

  4. Bewegen Sie unter Details den Mauszeiger über Scheduling State. Es wird ein Dialogfeld angezeigt, das den Grund und das Datum der Aussetzung angibt.