Dynamische Tabellen¶
Dynamische Tabellen sind die Bausteine von deklarativen Datentransformationspipelines. Diese Tabellen vereinfachen das Data Engineering in Snowflake erheblich und bieten eine zuverlässige, kostengünstige und automatisierte Methode, Ihre Daten für die weitere Nutzung umzuwandeln. Anstatt die Schritte der Datentransformation als eine Abfolge von Aufgaben zu definieren und die Abhängigkeiten und die Zeitplanung zu überwachen, können Sie einfach den Endzustand der Transformation mithilfe dynamischer Tabellen definieren und das komplexe Pipeline-Management Snowflake überlassen.
Unter diesem Thema werden Konzepte für dynamische Tabellen vorgestellt, und es wird erläutert, wie Sie Daten in einer kontinuierlichen Datenpipeline mithilfe dynamischer Tabellen umwandeln können.
Eine dynamische Tabelle ist eine Tabelle, die die Ergebnisse einer von Ihnen angegebenen Abfrage materialisiert. Anstatt eine separate Zieltabelle zu erstellen und Code zu schreiben, um die Daten in dieser Tabelle umzuwandeln und zu aktualisieren, können Sie die Zieltabelle als dynamische Tabelle definieren und die SQL-Anweisung angeben, die die Transformation ausführt. Ein automatisierter Prozess aktualisiert die materialisierten Ergebnisse automatisch durch regelmäßige (und oft inkrementelle) Aktualisierungen. Umfassende Informationen zur Aktualisierung dynamischer Tabellen finden Sie unter Erläuterungen zum Aktualisieren von dynamischen Tabellen.
Da der Inhalt einer dynamischen Tabelle vollständig durch die gegebene Abfrage bestimmt wird, kann der Inhalt nicht mit DML geändert werden. Bei einer dynamischen Tabelle können Sie keine Zeilen einfügen, aktualisieren oder löschen. Der automatische Aktualisierungsprozess materialisiert die Abfrageergebnisse in einer dynamischen Tabelle.
In den nächsten Abschnitten werden die Konzepte hinter dynamischen Tabellen erläutert:
Bemerkung
Das Replizieren von Datenbanken, die dynamische Tabellen enthalten, wird nicht unterstützt. Wenn eine Datenbank dynamische Tabellen enthält, schlägt die Replikation dieser Datenbank fehl. Um diese Einschränkung zu umgehen, müssen Sie in dieser Datenbank erst alle dynamischen Tabellen löschen, bevor Sie die Datenbank replizieren können.
Ein einfaches Beispiel¶
Das Beispiel in Transformieren geladener JSON-Daten nach einem Zeitplan verwendet Streams und Aufgaben, um neue Daten umzuwandeln und in zwei Zieltabellen (name
und visits
) einzufügen, während die Daten in eine Zieltabelle (raw
) gestreamt werden.
Die folgende Tabelle zeigt, wie Sie dieselbe Transformation mit dynamischen Tabellen ausführen können.
SQL-Anweisungen für Streams und Aufgaben |
SQL-Anweisungen für dynamische Tabellen |
---|---|
-- Create a landing table to store
-- raw JSON data.
CREATE OR REPLACE TABLE raw
(var VARIANT);
-- Create a stream to capture inserts
-- to the landing table.
CREATE OR REPLACE STREAM rawstream1
ON TABLE raw;
-- Create a table that stores the names
-- of office visitors from the raw data.
CREATE OR REPLACE TABLE names
(id INT,
first_name STRING,
last_name STRING);
-- Create a task that inserts new name
-- records from the rawstream1 stream
-- into the names table.
-- Execute the task every minute when
-- the stream contains records.
CREATE OR REPLACE TASK raw_to_names
WAREHOUSE = mywh
SCHEDULE = '1 minute'
WHEN
SYSTEM$STREAM_HAS_DATA('rawstream1')
AS
MERGE INTO names n
USING (
SELECT var:id id, var:fname fname,
var:lname lname FROM rawstream1
) r1 ON n.id = TO_NUMBER(r1.id)
WHEN MATCHED AND metadata$action = 'DELETE' THEN
DELETE
WHEN MATCHED AND metadata$action = 'INSERT' THEN
UPDATE SET n.first_name = r1.fname, n.last_name = r1.lname
WHEN NOT MATCHED AND metadata$action = 'INSERT' THEN
INSERT (id, first_name, last_name)
VALUES (r1.id, r1.fname, r1.lname);
|
-- Create a landing table to store
-- raw JSON data.
CREATE OR REPLACE TABLE raw
(var VARIANT);
-- Create a dynamic table containing the
-- names of office visitors from
-- the raw data.
-- Try to keep the data up to date within
-- 1 minute of real time.
CREATE OR REPLACE DYNAMIC TABLE names
TARGET_LAG = '1 minute'
WAREHOUSE = mywh
AS
SELECT var:id::int id, var:fname::string first_name,
var:lname::string last_name FROM raw;
|
Wie im vorherigen Beispiel gezeigt, geben Sie beim Erstellen einer dynamischen Tabelle die Abfrage für die Ergebnisse an, die Sie sehen möchten. Für die inkrementelle Aktualisierung der Daten müssen Sie keinen Stream erstellen, um Änderungen verfolgen und eine Aufgabe schreiben zu können, die diese Änderungen untersucht und auf die Zieltabelle anwendet. Der automatische Aktualisierungsprozess erledigt dies für Sie, basierend auf der von Ihnen angegebenen Abfrage.
Einsatzszenarios für dynamische Tabellen¶
Es gibt eine Reihe von Methoden, mit denen Sie die Daten in Ihrer Pipeline umwandeln können (z. B. Streams und Aufgaben, CTAS, Ihre eigenen kundenspezifischen Lösungen usw.). Dynamische Tabellen sind eine mögliche Methode, um Ihre Daten zu transformieren.
Dynamische Tabellen werden am besten in folgenden Fälle verwendet:
Sie möchten keinen Code schreiben, um Datenabhängigkeiten zu verfolgen und die Datenaktualisierung zu verwalten.
Sie benötigen die Komplexität von Datenstreams und Aufgaben nicht, und Sie möchten diese auch nicht vermeiden.
Sie benötigen keine fein abgestufte Steuerung für den Aktualisierungszeitplan.
Sie müssen die Ergebnisse einer auf mehreren Basistabellen ausgeführten Abfrage materialisieren.
Sie müssen keine nicht unterstützten dynamischen Abfragekonstrukte verwenden wie gespeicherte Prozeduren, nicht deterministische Funktionen, die nicht in Unterstützte nicht deterministische Funktionen in dynamischen Tabellen aufgeführt sind, oder externe Funktionen.
Bemerkung
Dynamische Tabellen können mit Streams verwendet werden. Bei gemeinsamer Verwendung funktioniert ein Stream, der auf einer dynamischen Tabelle basiert, wie jeder andere Stream. Weitere Informationen und Beispiele dazu finden Sie unter Streams und dynamische Tabellen.
Funktionsweise von dynamischen Tabellen¶
Beim Erstellen einer dynamischen Tabelle geben Sie die Abfrage an, die zur Transformation der Daten aus einer oder mehreren Basis- oder dynamischen Tabellen verwendet werden soll. Ein automatisierter Aktualisierungsprozess führt diese Abfrage in regelmäßigen Abständen aus und aktualisiert die dynamische Tabelle mit den Änderungen, die an den Basistabellen vorgenommen wurden.

Dieser automatisierte Prozess berechnet die Änderungen, die an den Basistabellen vorgenommen wurden, und führt diese Änderungen in der dynamischen Tabelle nach. Zur Ausführung dieser Aufgabe nutzt der Prozess Computeressourcen in dem Warehouse, das Sie der dynamischen Tabelle zuordnen.
Beim Erstellen einer dynamischen Tabelle geben Sie einen Zielwert für die Aktualität der Daten an (die geplante Verzögerung). Sie können beispielsweise festlegen, dass die Daten höchstens 5 Minuten hinter den Aktualisierungen der Basistabelle zurückbleiben sollen. Auf der Grundlage dieses Aktualitätsziels richtet der automatisierte Prozess die Aktualisierungen ein, sodass die Daten in der dynamischen Tabelle innerhalb dieses Ziels auf dem neuesten Stand gehalten werden (z. B. innerhalb von 5 Minuten nach Aktualisierungen der Basistabelle).
Wenn die Daten nicht so aktuell sein müssen, können Sie eine längere Verzögerungszeit angeben und so die Kosten senken. Wenn die Daten in der Zieltabelle beispielsweise höchstens 1 Stunde hinter den Aktualisierungen der Basistabellen zurückbleiben müssen, können Sie eine Zielaktualität von 1 Stunde (statt 5 Minuten) angeben, um die Kosten zu senken.
Verketten von Pipelines dynamischer Tabellen¶
Sie können eine dynamische Tabelle einrichten, um andere dynamische Tabellen abzufragen.
Angenommen, Ihre Datenpipeline ruft Daten aus einem Stagingbereich ab, um separate Dimensionstabellen für Kunden-, Produkt- sowie Datum/Uhrzeit-Daten zu aktualisieren. Angenommen, Ihre Pipeline aktualisiert auch eine Tabelle mit aggregierten Verkaufsdaten, die auf den Dimensionstabellen basieren.
Sie können die Dimensionstabellen als dynamische Tabellen einrichten, die die Stagingtabelle abfragen. Sie können dann die aggregierte Verkaufstabelle als dynamische Tabelle einrichten, die die Dimensionstabellen abfragt.
Dies ist vergleichbar mit der Art und Weise, wie Sie einen Directed Acyclic Graph (DAG) von Aufgaben definieren können. In einem DAG von Aufgaben wird die Aufgabe, die die aggregierte Verkaufstabelle aktualisiert, nur ausgeführt, wenn die Aufgaben zur Aktualisierung der Dimensionstabellen ohne Fehler abgeschlossen wurden.

Wenn eine dynamische Tabelle eine andere dynamische Tabelle abfragt, aktualisiert der automatische Aktualisierungsprozess alle abhängigen dynamischen Tabellen zum richtigen Zeitpunkt, um sicherzustellen, dass ihre Verzögerungsziele eingehalten werden und die Daten konsistent sind.
Erläuterungen zu den für dynamische Tabellen erforderlichen Berechtigungen¶
In den folgenden Abschnitten werden die Berechtigungen erläutert, die zum Erstellen und Verwenden von dynamischen Tabellen erforderlich sind:
Berechtigungen für dynamische Tabellen¶
In der folgenden Tabelle sind die Berechtigungen beschrieben, die für das Verwalten dynamischer Tabellen erforderlich sind:
Berechtigung |
Verwendung |
---|---|
SELECT |
Aktualisiert das Ausführen einer SELECT-Anweisung für eine dynamische Tabelle. |
MONITOR |
Ermöglicht das Anzeigen von Details zur dynamischen Tabelle (über DESCRIBE DYNAMIC TABLE oder die Detailseite der dynamischen Tabellen in Snowsight) und das Auflisten von Tabellen, auf die Sie Zugriff haben (über SHOW DYNAMIC TABLES). |
OPERATE |
Ermöglicht das Anzeigen von Details zur dynamischen Tabelle (über DESCRIBE DYNAMIC TABLE) und das Ändern der folgenden Eigenschaften: WAREHOUSE und TARGET_LAG. |
OWNERSHIP |
Gewährt volle Kontrolle über die dynamische Tabelle. Erforderlich, um Eigenschaften einer dynamischen Tabelle zu ändern. Diese Berechtigung kann für ein bestimmtes Objekt immer nur einer Rolle erteilt sein. |
ALL [ PRIVILEGES ] |
Erteilt alle Berechtigungen für die dynamische Tabelle, außer OWNERSHIP. |