Dynamische Tabellen erstellen¶
Unter diesem Thema werden die wichtigsten Konzepte zur Erstellung dynamischer Tabellen erläutert.
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 Beschrä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 Basisobjekte ändern, ändert sich auch die dynamische Tabelle. Wenn Sie ein Basisobjekt 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¶
Suppose that you want to create a dynamic table named product
that contains the product_id
and product_name
columns from the table
named staging_table
, and you decide:
You want the data in the
product
table to be at most 20 minutes behind the data instaging_table
.Sie möchten die Computeressourcen des Warehouses
mywh
für die Aktualisierung verwenden.Sie möchten, dass der Aktualisierungsmodus automatisch ausgewählt wird.
Snowflake empfiehlt, den automatischen Aktualisierungsmodus nur während der Entwicklungphase zu verwenden. Weitere Informationen dazu finden Sie unter Best Practices für die Auswahl von Aktualisierungsmodi für dynamische Tabellen.
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;
Eine vollständige Liste der Parameter und der Syntaxvarianten finden Sie unter CREATE DYNAMIC TABLE.
Best Practices für das Erstellen dynamischer Tabellen¶
Pipelines dynamischer Tabellen verketten¶
Wenn Sie eine neue dynamische Tabelle definieren, sollten Sie keine große dynamische Tabelle mit vielen verschachtelten Anweisungen definieren, sondern stattdessen kleine dynamische Tabellen mit Pipelines verwenden.
Sie können eine dynamische Tabelle einrichten, um andere dynamische Tabellen abzufragen. Stellen Sie sich zum Beispiel ein Szenario vor, in dem Ihre Datenpipeline Daten aus einem Stagingbereich extrahiert, um verschiedene Dimensionstabellen zu aktualisieren (z. B. customer
, product
, date
und time
). Außerdem aktualisiert Ihre Pipeline eine aggregierte Tabelle sales
, die auf den Informationen aus diesen Dimensionstabellen basiert. Indem Sie die Dimensionstabellen so konfigurieren, dass sie die Staging-Tabelle abfragen, und die aggregierte Tabelle sales
so, dass sie die Dimensionstabellen abfragt, erzeugen Sie einen Kaskadeneffekt, ähnlich wie bei einem Task-Graphen.
In diesem Setup wird die Aktualisierung der aggregierten Tabelle sales
erst ausgeführt, nachdem die Aktualisierungen der Dimensionstabellen erfolgreich abgeschlossen wurden. Dies stellt die Konsistenz der Daten und die Einhaltung der Verzögerungsziele sicher. Durch einen automatischen Aktualisierungsprozess lösen alle Änderungen in den Quelltabellen zu den entsprechenden Zeitpunkten Aktualisierungen in allen abhängigen Tabellen aus.

Dynamische „Controller“-Tabelle für komplexe Task-Graphen verwenden¶
Wenn Sie einen komplexen Graphen von dynamischen Tabellen mit vielen Wurzeln und Blättern haben und mit einem einzigen Befehl Operationen (z. B. Änderung der Verzögerung, manuelle Aktualisierung, Aussetzung) am gesamten Task-Graphen ausführen möchten, gehen Sie wie folgt vor:
Setzen Sie den Wert für
TARGET_LAG
für alle Ihre dynamischen Tabellen aufDOWNSTREAM
.Erstellen Sie eine dynamische „Controller“-Tabelle, die alle Blätter in Ihrem Task-Graphen ausliest. Um sicherzustellen, dass dieser Controller keine Ressourcen verbraucht, gehen Sie wie folgt vor:
CREATE DYNAMIC TABLE controller TARGET_LAG = <target_lag> WAREHOUSE = <warehouse> AS SELECT 1 A FROM <leaf1>, …, <leafN> LIMIT 0;
Verwenden Sie den Controller, um den gesamten Task-Graphen zu steuern. Beispiel:
Legen Sie eine neue Zielverzögerung für den Task-Graphen fest.
ALTER DYNAMIC TABLE controller SET TARGET_LAG = <new_target_lag>;Aktualisieren Sie den Task-Graphen manuell.
ALTER DYNAMIC TABLE controller REFRESH;
Allgemeine Informationen zum Klonen der Pipelines von dynamischen Tabellen¶
Klonen Sie alle Elemente einer Pipeline für dynamische Tabellen mit demselben Klon-Befehl, um Neuinitialisierungen Ihrer Pipeline zu vermeiden. Sie können dies tun, indem Sie alle Elemente der Pipeline (z. B. Basistabellen, Ansichten und dynamische Tabellen) in demselben Schema oder derselben Datenbank konsolidieren.
Verwenden Sie transiente dynamische Tabellen, um die Speicherkosten zu reduzieren¶
Transiente dynamische Tabellen halten Daten zuverlässig über die Zeit aufrecht und unterstützen Time Travel innerhalb der Datenaufbewahrungsfrist, bewahren aber keine Daten über die Fail-safe-Frist hinaus auf. Standardmäßig werden die dynamischen Tabellendaten sieben Tage lang im Fail-safe-Speicher aufbewahrt.
Bei dynamischen Tabellen mit hohem Aktualisierungsdurchsatz kann dies den Speicherverbrauch erheblich erhöhen. Daher sollten Sie eine dynamische Tabelle nur dann zu einer transienten Tabelle machen, wenn ihre Daten nicht dasselbe Maß an Datenschutz und Wiederherstellung benötigen, das permanente Tabellen bieten.
Mit der Anweisung CREATE DYNAMIC TABLE können Sie eine transiente dynamische Tabelle erstellen oder bestehende dynamische Tabellen in transiente dynamische Tabellen klonen.
Probleme beim Erstellen dynamischer Tabellen lösen¶
Wenn Sie eine dynamische Tabelle erstellen, erfolgt die erste Aktualisierung entweder nach einem Zeitplan (ON_SCHEDULE
) oder sofort bei der Erstellung (ON_CREATE
). Die erstmalige Datenbefüllung oder Initialisierung hängt davon ab, wann diese erste Aktualisierung stattfindet. Bei ON_CREATE
kann die Initialisierung zum Beispiel länger dauern, wenn sie Aktualisierungen von vorgelagerten dynamischen Tabellen auslöst.
Die Initialisierung kann einige Zeit dauern, je nachdem, wie viele Daten gescannt werden. Um den Fortschritt zu sehen, gehen Sie wie folgt vor:
Melden Sie sich bei Snowsight an.
Wählen Sie im Navigationsmenü die Option Monitoring » Query History aus.
In der Dropdown-Liste Filters geben Sie CREATE DYNAMIC TABLE als SQL Text-Filter und Ihren Warehouse-Namen als Warehouse-Filter ein.
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.