CREATE DYNAMIC TABLE

Erstellt eine dynamische Tabelle auf Basis einer angegebenen Abfrage.

Siehe auch:

ALTER DYNAMIC TABLE, DESCRIBE DYNAMIC TABLE, DROP DYNAMIC TABLE, SHOW DYNAMIC TABLES

Unter diesem Thema:

Syntax

CREATE [ OR REPLACE ] DYNAMIC TABLE <name>
  [ ( <column_list> ) ]
  TARGET_LAG = { '<num> { seconds | minutes | hours | days }' | DOWNSTREAM }
  WAREHOUSE = <warehouse_name>
  REFRESH_MODE = { AUTO | FULL | INCREMENTAL }
  INITIALIZE = { ON_CREATE | ON_SCHEDULE }
  AS <query>
  [ COMMENT = '<string_literal>' ]
Copy

Syntaxvariante

CREATE DYNAMIC TABLE … CLONE

Erstellt eine neue dynamische Tabelle mit den gleichen Spaltendefinitionen und allen in der dynamischen Quelltabelle vorhandenen Daten, aber ohne die Daten tatsächlich zu kopieren. Diese Variante kann auch verwendet werden, um eine dynamische Tabelle zu einem bestimmten Zeitpunkt in der Vergangenheit zu klonen. Siehe Hinweise zum Klonen.

CREATE [ OR REPLACE ] DYNAMIC TABLE <name>
  CLONE <source_dynamic_table>
        [ { AT | BEFORE } ( { TIMESTAMP => <timestamp> | OFFSET => <time_difference> | STATEMENT => <id> } ) ]
  [
    TARGET_LAG = { '<num> { seconds | minutes | hours | days }' | DOWNSTREAM }
    WAREHOUSE = <warehouse_name>
  ]
Copy

Weitere Details zum Klonen finden Sie unter CREATE <Objekt> … CLONE.

Erforderliche Parameter

name

Gibt den Bezeichner (d. h. den Namen) für die dynamische Tabelle an. Dieser muss für das Schema, in dem die dynamische Tabelle erstellt wird, eindeutig sein.

Darüber hinaus muss der Bezeichner mit einem Buchstaben beginnen und darf keine Leer- oder Sonderzeichen enthalten, es sei denn, die gesamte Bezeichnerzeichenfolge wird in doppelte Anführungszeichen gesetzt (z. B. "My object"). Bei Bezeichnern, die in doppelte Anführungszeichen eingeschlossen sind, ist auch die Groß-/Kleinschreibung zu beachten.

Weitere Details dazu finden Sie unter Anforderungen an Bezeichner.

TARGET_LAG = { num { seconds | minutes | hours | days } | DOWNSTREAM }

Gibt die Verzögerung für die dynamische Tabelle an:

'num seconds | minutes | hours | days'

Gibt die maximale Zeitspanne an, die der Inhalt der dynamischen Tabelle hinter den Aktualisierungen der Basistabellen zurückbleiben darf.

Beispiel:

  • Wenn die Daten in der dynamischen Tabelle nicht mehr als 5 Minuten zurückbleiben sollen, geben Sie 5 minutes an.

  • Wenn die Daten in der dynamischen Tabelle nicht mehr als 5 Stunden zurückbleiben sollen, geben Sie 5 hours an.

Der Minimumwert ist 1 Minute. Wenn die dynamische Tabelle A von einer anderen dynamischen Tabelle B abhängt, muss die minimale Verzögerung für A größer oder gleich der Verzögerung für B sein.

DOWNSTREAM

Gibt an, dass die dynamische Tabelle nur aktualisiert werden soll, wenn dynamische Tabellen, die von ihr abhängen, aktualisiert werden.

WAREHOUSE = warehouse_name

Gibt den Namen des Warehouses an, das die Computeressourcen für die Aktualisierung der dynamischen Tabelle bereitstellt.

Sie müssen über die Berechtigung USAGE für dieses Warehouse verfügen, um die dynamische Tabelle erstellen zu können.

REFRESH_MODE = { AUTO | FULL | INCREMENTAL }

Gibt den Aktualisierungstyp für die dynamische Tabelle an. Diese Eigenschaft kann nicht mehr geändert werden, nachdem Sie die dynamische Tabelle erstellt haben. Um die Eigenschaft zu ändern, replizieren Sie die dynamische Tabelle mit einem CREATE OR REPLACE DYNAMIC TABLE-Befehl.

AUTO

Erzwingt standardmäßig eine inkrementelle Aktualisierung der dynamischen Tabelle. Wenn die CREATE DYNAMIC TABLE-Anweisung den inkrementellen Aktualisierungsmodus nicht unterstützt, wird die dynamische Tabelle automatisch mit dem Modus der vollständigen Aktualisierung erstellt.

Sie können den Aktualisierungsmodus mit der SHOW DYNAMIC TABLES-Anweisung überprüfen. Die Spalte refresh_mode zeigt den aktuellen Aktualisierungsmodus an, während die Spalte text den benutzerdefinierten Aktualisierungsmodus anzeigt.

FULL

Erzwingt eine vollständige Aktualisierung der dynamischen Tabelle, auch wenn die dynamische Tabelle inkrementell aktualisiert werden kann.

INCREMENTAL

Erzwingt eine inkrementelle Aktualisierung der dynamischen Tabelle. Wenn die Abfrage, die der dynamischen Tabelle zugrunde liegt, keine inkrementelle Aktualisierung ausführen kann, schlägt das Erstellen der dynamischen Tabelle fehl und es wird eine Fehlermeldung angezeigt.

Standard: AUTO

INITIALIZE

Spezifiziert das Verhalten der erstmaligen Aktualisierung der dynamischen Tabelle. Diese Eigenschaft kann nicht mehr geändert werden, nachdem Sie die dynamische Tabelle erstellt haben. Um die Eigenschaft zu ändern, replizieren Sie die dynamische Tabelle mit einem CREATE OR REPLACE DYNAMIC TABLE-Befehl.

ON_CREATE

Aktualisiert die dynamische Tabelle synchron beim Erstellen.

ON_SCHEDULE

Aktualisiert die dynamische Tabelle bei der nächsten geplanten Aktualisierung.

Die dynamische Tabelle wird aufgefüllt, wenn der Aktualisierungsprozess ausgeführt wird. Beim Erstellen der dynamischen Tabelle werden keine Daten eingefügt. Wenn Sie versuchen, die Tabelle mit SELECT * FROM DYNAMIC TABLE abzufragen, wird möglicherweise der folgende Fehler angezeigt, da die erste geplante Aktualisierung noch nicht stattgefunden hat.

Standard: ON_CREATE

AS query

Gibt die Abfrage an, deren Ergebnisse die dynamische Tabelle enthalten soll.

Optionale Parameter

COMMENT = 'string_literal'

Gibt einen Kommentar für die dynamische Tabelle an.

Standard: Kein Wert.

column_list

Wenn Sie in der dynamischen Tabelle den Namen einer Spalte ändern oder einen Kommentar zu einer Spalte hinzufügen möchten, fügen Sie eine Spaltenliste ein, die die Spaltennamen und ggf. Kommentare zu den Spalten angibt. Sie müssen nicht die Datentypen der Spalten angeben.

Wenn eine der Spalten in der dynamischen Tabelle auf Ausdrücken basiert, z. B. nicht auf einfachen Spaltennamen, müssen Sie für jede Spalte in der dynamischen Tabelle einen Spaltennamen angeben. Beispielsweise sind die Spaltennamen im folgenden Fall erforderlich:

CREATE DYNAMIC TABLE product (pre_tax_profit, taxes, after_tax_profit)
  TARGET_LAG = '20 minutes'
    WAREHOUSE = mywh
    AS
      SELECT revenue - cost, (revenue - cost) * tax_rate, (revenue - cost) * (1.0 - tax_rate)
      FROM staging_table;
Copy

Sie können für jede Spalte einen optionalen Kommentar angeben. Beispiel:

CREATE DYNAMIC TABLE product (pre_tax_profit COMMENT 'revenue minus cost',
                taxes COMMENT 'assumes taxes are a fixed percentage of profit',
                after_tax_profit)
  TARGET_LAG = '20 minutes'
    WAREHOUSE = mywh
    AS
      SELECT revenue - cost, (revenue - cost) * tax_rate, (revenue - cost) * (1.0 - tax_rate)
      FROM staging_table;
Copy

Anforderungen an die Zugriffssteuerung

Eine Rolle, die zur Ausführung dieses SQL-Befehls verwendet wird, muss mindestens die folgenden Berechtigungen haben:

Berechtigung

Objekt

Anmerkungen

CREATE DYNAMIC TABLE

Schema, in dem die dynamische Tabelle erstellt werden soll.

SELECT

Tabellen, Ansichten und dynamische Tabellen, die für die neue dynamische Tabelle abgefragt werden sollen.

USAGE

Warehouse, das zum Aktualisieren der Tabelle verwendet werden soll.

Beachten Sie, dass für die Bearbeitung eines Objekts in einem Schema auch die Berechtigung USAGE für die übergeordnete Datenbank und das Schema erforderlich ist.

Eine Anleitung zum Erstellen einer kundenspezifischen Rolle mit einer bestimmten Gruppe von Berechtigungen finden Sie unter Erstellen von kundenspezifischen Rollen.

Allgemeine Informationen zu Rollen und Berechtigungen zur Durchführung von SQL-Aktionen auf sicherungsfähigen Objekten finden Sie unter Übersicht zur Zugriffssteuerung.

Nutzungshinweise

  • Wenn Sie den Befehl CREATE DYNAMIC TABLE ausführen, wird die aktuell verwendete Rolle zum Eigentümer der dynamischen Tabelle. Diese Rolle wird verwendet, um Aktualisierungen der dynamischen Tabelle im Hintergrund auszuführen.

  • Dynamische Tabellen werden aktualisiert, wenn sich die zugrunde liegenden Datenbankobjekte ändern. Die Änderungsverfolgung muss für alle zugrunde liegenden Objekte, die von einer dynamischen Tabelle verwendet werden, aktiviert sein. Siehe Dynamische Tabellen und Änderungsverfolgung.

  • Wenn Sie eine vorhandene dynamische Tabelle ersetzen möchten und dazu deren aktuelle Definition anzeigen müssen, rufen Sie die Funktion GET_DDL auf.

  • Kunden müssen sicherstellen, dass bei der Nutzung des Snowflake-Dienstes keine personenbezogenen Daten (außer für ein Objekt „Benutzer“), sensible Daten, exportkontrollierte Daten oder andere regulierte Daten als Metadaten eingegeben werden. Weitere Informationen dazu finden Sie unter Metadatenfelder in Snowflake.

Beispiele

Erstellen Sie eine dynamische Tabelle mit dem Namen product:

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

Im obigen Beispiel:

  • Die dynamische Tabelle materialisiert die Ergebnisse einer Abfrage der Spalten product_id und product_name der Tabelle staging_table.

  • Die Zielverzögerungszeit beträgt 20 Minuten, was bedeutet, dass die Daten in der dynamischen Tabelle idealerweise nicht mehr als 20 Minuten älter sein sollten als die Daten in staging_table.

  • Der automatische Aktualisierungsprozess nutzt die Computeressourcen im Warehouse mywh zum Aktualisieren der Daten in der dynamischen Tabelle.

Klonen Sie eine dynamische Tabelle so, wie sie genau zu Datum und Uhrzeit des angegebenen Zeitstempels existierte:

CREATE DYNAMIC TABLE orders_clone_restore CLONE orders AT (TIMESTAMP => TO_TIMESTAMP_TZ('04/05/2013 01:02:03', 'mm/dd/yyyy hh24:mi:ss'));
Copy