Dynamische Tabellen erstellen

Unter diesem Thema werden die wichtigsten Konzepte zum Erstellen dynamischer Tabellen sowie die Vorgänge während des Initialisierungsprozesses beschrieben.

Stellen Sie vor Beginn sicher, dass Sie über die Berechtigungen für das Erstellen dynamischer Tabellen verfügen und dass für alle von der Abfrage dynamischer Tabellen verwendeten Objekte die Änderungsverfolgung aktiviert ist.

Für das Erstellen dynamischer Tabellen können einige Einschränkungen gelten. Eine vollständige Liste finden Sie unter Bekannte Einschränkungen für dynamische Tabellen.

Änderungsverfolgung aktivieren

Snowflake versucht automatisch, beim Erstellen einer dynamischen Tabelle die Änderungsverfolgung für alle zugrunde liegenden Objekte zu aktivieren. Wenn sich die zugrunde liegenden Datenbankobjekte ändern, ändert sich auch die dynamische Tabelle. Wenn Sie ein Objekt neu erstellen, müssen Sie die Änderungsverfolgung wieder aktivieren.

Wenn beim Erstellen einer dynamischen Tabelle mit inkrementeller Aktualisierung die Änderungsverfolgung für die abgefragten Tabellen noch nicht aktiviert ist, versucht Snowflake automatisch, die Änderungsverfolgung für sie zu aktivieren. Um inkrementelle Aktualisierungen zu unterstützen, muss die Änderungsverfolgung mit Nicht-Null-Time Travel-Aufbewahrungsfrist für alle zugrunde liegenden Objekte, die von einer dynamischen Tabelle verwendet werden, aktiviert sein.

Um die Änderungsverfolgung für ein bestimmtes Datenbankobjekt zu aktivieren, verwenden Sie ALTER TABLE, ALTER VIEW und ähnliche Befehle für dieses Objekt. Der Benutzer, der die dynamische Tabelle erstellt, muss die OWNERSHIP-Berechtigungen haben, um die Änderungsverfolgung für alle zugrunde liegenden Objekte zu aktivieren. Um zu prüfen, ob die Änderungsverfolgung aktiviert ist, verwenden Sie SHOW VIEWS, SHOW TABLES und ähnliche Befehle für die zugrunde liegenden Objekte, und untersuchen Sie die Spalte change_tracking.

Syntax für das Erstellen dynamischer Tabellen

Angenommen, Sie möchten eine dynamische Tabelle namens product erstellen, die die Spalten product_id und product_name aus der Tabelle staging_table enthält, und Sie haben folgende Ziele:

  • Sie möchten, dass die Daten in der Tabelle product höchstens 20 Minuten hinter den Daten in staging_table zurückbleiben.

  • Sie möchten die Computeressourcen des Warehouses mywh für die Aktualisierung verwenden.

  • Sie möchten, dass der Aktualisierungstyp automatisch ausgewählt wird und dass die dynamische Tabelle bei der Erstellung synchron aktualisiert wird.

Zum Erstellen der dynamischen Tabelle führen Sie die folgende SQL-Anweisung CREATE DYNAMIC TABLE aus:

CREATE OR REPLACE DYNAMIC TABLE product
  TARGET_LAG = '20 minutes'
  WAREHOUSE = mywh
  REFRESH_MODE = auto
  INITIALIZE = on_create
  AS
    SELECT product_id, product_name FROM staging_table;
Copy

Eine vollständige Liste der Parameter und der Syntaxvarianten finden Sie unter CREATE DYNAMIC TABLE.

Initialisierung dynamischer Tabellen

Wenn Sie eine dynamische Tabelle mit einer CREATE DYNAMIC TABLE-Anweisung erstellen, erfolgt ihre erstmalige Aktualisierung entweder zu einem geplanten Zeitpunkt oder synchron bei der Erstellung. Die erstmalige Datenbefüllung oder Initialisierung hängt davon ab, wann diese erste Aktualisierung stattfindet.

Dynamische Tabellen werden auf der Grundlage der angegebenen Zielverzögerung aktualisiert, die die maximal zulässige Zeit festlegt, die der Inhalt der dynamischen Tabelle hinter den Aktualisierungen der Basistabellen zurückbleiben darf. Wenn Sie beim Erstellen eine dynamische Tabelle zur synchronen Aktualisierung angeben, wird sie sofort initialisiert. Wenn jedoch eine dynamische Tabelle so eingestellt ist, dass sie zu einem geplanten Zeitpunkt aktualisiert wird, wird sie innerhalb der für die Zielverzögerung angegebenen Zeit initialisiert.

Angenommen, eine dynamische Tabelle DT1 weist eine Zielverzögerung von 30 Minuten auf. Die Grundgesamtheit der Daten für DT1 kann wie folgt aussehen:

  1. Wenn DT1 so eingestellt ist, dass sie beim Erstellen synchron aktualisiert wird (Standard), wird sie bei der Erstellung initialisiert.

  2. Wenn DT1 so eingestellt ist, dass sie zu einem geplanten Zeitpunkt aktualisiert wird, wird sie innerhalb der für die Zielverzögerung angegebenen Zeit initialisiert.

In Szenarios, die nachgelagerte Abhängigkeiten beinhalten, ändern sich die dynamischen Tabellen. Betrachten Sie die dynamischen Tabellen DT1 und DT2, wobei DT1 eine nachgelagerte Zielverzögerung hat und DT2 eine Zielverzögerung von 30 Minuten hat und von DT1 abhängt. DT1 mit seiner nachgelagerten Zielverzögerung wird nur aktualisiert, wenn abhängige dynamische Tabellen wie DT2 aktualisiert werden.

Für DT1 in diesem Kontext:

  1. Wenn sie so eingestellt ist, dass sie beim Erstellen synchron aktualisiert wird, wird sie beim Erstellen aktualisiert und initialisiert. Wenn die Initialisierung fehlschlägt, wird der Erstellungsprozess der Tabellen angehalten, wodurch ein sofortiges Feedback zu fehlerhaften Definitionen bereitgestellt wird.

  2. Wenn eine Aktualisierung zu einem geplanten Zeitpunkt konfiguriert ist, hängt die Initialisierung davon ab, wann DT2, die abhängige Tabelle, aktualisiert wird.

Die Initialisierung kann einige Zeit dauern, je nachdem, wie viele Daten gescannt werden. Um den Fortschritt zu verfolgen, können Sie den Aktualisierungsverlauf mit der Funktion DYNAMIC_TABLE_REFRESH_HISTORY abfragen.

Erläuterungen zu den Auswirkungen von Änderungen an Spalten in Basistabellen

Die Spalten in den Basistabellen, Ansichten und den zugrunde liegenden dynamischen Tabellen können sich im Laufe der Zeit ändern. Einige Änderungen können sich auf die dynamische Tabelle selbst auswirken, während andere nur begrenzte oder gar keine Auswirkungen haben.

Wenn sich die zugrunde liegenden Objekte, die mit einer dynamischen Tabelle verbunden sind, ändern, hat dies folgende Auswirkungen:

Änderung

Auswirkung

  • Neue Spalte hinzugefügt.

  • Vorhandene, nicht genutzte Spalte entfernt.

Keine. Wenn der Basistabelle eine neue Spalte hinzugefügt wurde oder eine nicht genutzte Spalte gelöscht wurde, werden keine Aktionen ausgeführt, und die Aktualisierungen werden wie zuvor fortgesetzt.

  • Die zugrunde liegende Basistabelle wird mit identischen Spaltennamen und -typen neu erstellt.

  • Eine Spalte der zugrunde liegenden Basistabelle wird mit demselben Namen und Typ neu erstellt.

Vollständige Aktualisierung/Neuinitialisierung: Während des nächsten Aktualisierungszyklus wird eine vollständige Aktualisierung ausgeführt, um sicherzustellen, dass keine falschen oder veralteten Daten in der dynamischen Tabelle vorhanden sind.

  • Eine zugrunde liegende Spalte oder ein anderes Element, das von einer dynamischen Tabelle verwendet wird, ändert sich im Namen oder auf andere Weise.

Der Status der dynamischen Tabelle ändert sich in FAILING. Die dynamische Tabelle muss neu erstellt werden, um die Änderung zu berücksichtigen. Weitere Informationen zu Statusoptionen dynamischer Tabellen finden Sie unter Status dynamischer Tabellen.