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

Wenn beim Erstellen einer dynamischen Tabelle mit inkrementellem Aktualisierungsmodus 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. 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.

Bemerkung

Snowflake versucht nicht automatisch, die Änderungsverfolgung bei dynamischen Tabellen zu aktivieren, die im Modus der vollständigen Aktualisierung erstellt wurden.

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 Aktualisierungsmodus automatisch ausgewählt wird.

  • Sie möchten, dass die dynamische Tabelle bei der Erstellung synchron aktualisiert wird.

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

Erläuterungen zur 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 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.