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 dann 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 materialisiert die Ergebnisse einer von Ihnen angegebenen Abfrage. 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 Aktualisierungen.

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.

Mehr Informationen dazu finden Sie weiter unten unter diesem Thema.

In den nächsten Abschnitten werden die Konzepte hinter dynamischen Tabellen erläutert:

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

Das folgende Beispiel 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);
Copy
-- 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;
Copy

Wie dieses Beispiel zeigt, 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 verschiedene 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öglichkeit, 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 müssen die Ergebnisse einer auf mehreren Basistabellen ausgeführten Abfrage materialisieren.

  • Sie müssen mehrere Tabellen erstellen, um Daten über eine ETL-Pipeline zu transformieren.

  • Sie benötigen keine fein abgestufte Steuerung für den Aktualisierungszeitplan, sondern Sie möchten für Ihre Pipelines nur die Aktualität der Zieldaten angeben.

  • Sie müssen keine nicht unterstützten dynamischen Abfragekonstrukte verwenden wie gespeicherte Prozeduren oder nicht deterministische Funktionen, die nicht in Unterstützte nicht deterministische Funktionen in dynamischen Tabellen aufgeführt sind, oder externe Funktionen. Oder Sie müssen die Quellen von dynamischen Tabellen verwenden, bei denen es sich um externe Tabellen, Streams oder materialisierte Ansichten handelt.

Bemerkung

Dynamische Tabellen können als Quelle für einen Stream 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 Basisobjekte oder dynamischen Tabellen verwendet wird. Ein automatisierter Aktualisierungsprozess führt diese Abfrage in regelmäßigen Abständen aus und aktualisiert die dynamische Tabelle mit den Änderungen, die an den Basisobjekten vorgenommen wurden.

Comparison between streams / tasks and dynamic tables

Dieser automatisierte Prozess berechnet die Änderungen, die an den Basisobjekten vorgenommen wurden, und führt diese Änderungen in der dynamischen Tabelle nach. Zur Ausführung dieser Aufgabe nutzt der Prozess die Computeressourcen, die Sie der dynamischen Tabelle zuordnen. Weitere Informationen zu Ressourcen finden Sie unter Erläuterungen zu den Kosten von dynamischen Tabellen.

Beim Erstellen einer dynamischen Tabelle geben Sie einen Zielwert für die Aktualität der Daten an (die geplante Verzögerung). Sie können zum Beispiel festlegen, dass die Daten höchstens fünf Minuten hinter den Aktualisierungen der Basistabelle zurückbleiben sollen. Auf der Grundlage dieses Aktualitätsziels richtet der automatische Prozess die Aktualisierungen so ein, dass die Daten in der dynamischen Tabelle innerhalb dieses Ziels auf dem neuesten Stand gehalten werden (im Beispiel innerhalb von fünf Minuten nach den 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 dürfen, können Sie eine Zielaktualität von 1 Stunde (statt 5 Minuten) angeben, um die Kosten zu senken.

Allgemeine Informationen zum 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. 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 dem Definieren eines Directed Acyclic Graph (DAG) von Aufgaben. 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.

Comparison between DAGs for streams / tasks and dynamic tables

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.

OPERATE

Erforderlich, um Eigenschaften einer dynamischen Tabelle zu ändern, einschließlich:

OWNERSHIP

Gewährt volle Kontrolle über die dynamische Tabelle. 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.

Dynamische Tabellen und Time Travel

Snowflake Time Travel ermöglicht den Zugriff auf historische Daten (d. h. Daten, die geändert oder gelöscht wurden) zu jedem Zeitpunkt innerhalb eines definierten Zeitraums. Time Travel verhält sich bei dynamischen Tabellen genauso wie bei herkömmlichen Tabellen.

Weitere Informationen dazu finden Sie unter Snowflake Time Travel & Fail-safe.

Dynamische Tabellen und Replikation

Die Replikationsunterstützung für dynamische Tabellen ermöglicht das Kopieren von Daten aus einer Primärdatenbank in eine Sekundärdatenbank entweder für Notfallwiederherstellung oder Data Sharing. Sie kann entweder als Failover-Vorbereitungsstrategie für die Notfallwiederherstellung oder als Mittel zum Data Sharing über verschiedene Bereitstellungen hinweg und rein zu Lesezwecken dienen.

Replizierte dynamische Tabellen verhalten sich unterschiedlich, je nachdem, ob die Primärdatenbank, die die dynamische Tabelle enthält, in einer Replikationsgruppe oder in einer Failover-Gruppe repliziert wird. Weitere Informationen dazu finden Sie unter Replikation und dynamische Tabellen.