CREATE INTERACTIVE TABLE

Creates a new interactive table in the current/specified schema or replaces an existing table. Interactive tables are optimized for low-latency, interactive queries and provide the best performance when queried using interactive warehouses.

Interaktive Tabellen unterstützen eine begrenztere Menge von SQL-Vorgängen als Standardtabellen und sind für hochgradig parallele Abfrage-Workloads in Echtzeit konzipiert, wie z. B. Dashboards und datengestützte APIs.

Bemerkung

Wenn Sie eine interaktive Tabelle erstellen, müssen Sie eine CLUSTER BY-Klausel für eine oder mehrere Spalten definieren, die in den WHERE-Klauseln für Ihre zeitkritischsten Abfragen verwendet werden.

Sie können auch die folgenden CREATE INTERACTIVE TABLE-Varianten verwenden:

Die vollständige CREATE TABLE-Syntax, die für Standard-Snowflake-Tabellen verwendet wird, finden Sie unter CREATE TABLE.

Tipp

Bevor Sie interaktive Tabellen erstellen und verwenden, sollten Sie sich mit den entsprechenden Einschränkungen und Anwendungsfällen vertraut machen. Interaktive Tabellen funktionieren am besten mit einfachen SELECT-Anweisungen mit selektiven WHERE-Klauseln.

Siehe auch:

CREATE WAREHOUSE, ALTER WAREHOUSE, SHOW TABLES, SHOW WAREHOUSES, DROP TABLE

Syntax

CREATE [ OR REPLACE ] INTERACTIVE TABLE [ IF NOT EXISTS ] <table_name>
  (
    <col_name> <col_type>
      [ [ WITH ] MASKING POLICY <policy_name> [ USING ( <col_name> , <cond_col1> , ... ) ] ]
      [ , <col_name> <col_type> [ ... ] ]
  )
  CLUSTER BY ( <expr> [ , <expr> , ... ] )
  [ TARGET_LAG = '<num> { seconds | minutes | hours | days }' ]
  [ WAREHOUSE = <warehouse_name> ]
  [ COPY GRANTS ]
  [ COMMENT = '<string_literal>' ]
  [ [ WITH ] ROW ACCESS POLICY <policy_name> ON ( <col_name> [ , <col_name> ... ] ) ]
  [ [ WITH ] AGGREGATION POLICY <policy_name> [ ENTITY KEY ( <col_name> [ , <col_name> ... ] ) ] ]
  [ [ WITH ] JOIN POLICY <policy_name> [ ALLOWED JOIN KEYS ( <col_name> [ , ... ] ) ] ]
  [ [ WITH ] STORAGE LIFECYCLE POLICY <policy_name> ON ( <col_name> [ , <col_name> ... ] ) ]
  AS <query>
Copy

Erforderliche Parameter

table_name

Gibt den Bezeichner (d. h. den Namen) für die interaktive Tabelle an. Dieser muss für das Schema, in dem die 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.

CLUSTER BY ( expr [ , expr , ... ] )

Specifies one or more columns or column expressions in the table as the clustering key. Choose clustering columns that are used in the WHERE clauses of your most time-critical queries, as this significantly affects query performance.

Weitere Informationen zum Auswählen effektiver Gruppierungsschlüssel finden Sie unter Gruppierungsschlüssel und geclusterte Tabellen.

AS query

Specifies the SELECT statement that populates the interactive table. This query must be specified last in the CREATE INTERACTIVE TABLE statement, regardless of other parameters included.

Die Abfrage folgt den Mustern von CREATE TABLE AS SELECT (CTAS) und definiert die Daten und das Schema für die interaktive Tabelle.

col_name

Specifies the column identifier (i.e. name). Column identifiers must start with an alphabetic character and cannot contain spaces or special characters unless the entire identifier string is enclosed in double quotes.

Weitere Details dazu finden Sie unter Anforderungen an Bezeichner.

col_type

Gibt den Datentyp für die Spalte an.

Einzelheiten zu den Datentypen, die für Tabellenspalten angegeben werden können, finden Sie unter Referenz der SQL-Datentypen.

Optionale Parameter

MASKING POLICY policy_name

Gibt die Maskierungsrichtlinie an, die für eine Spalte festgelegt werden soll.

USING ( col_name , cond_col_1 ... )

Gibt die Argumente an, die an den SQL-Ausdruck für die bedingte Maskierungsrichtlinie übergeben werden sollen.

Die erste Spalte in der Liste gibt die Spalte für die Richtlinienbedingungen zur Maskierung oder Tokenisierung der Daten an. Sie muss mit der Spalte übereinstimmen, für die die Maskierungsrichtlinie festgelegt ist.

Die zusätzlichen Spalten geben an, welche Spalten ausgewertet werden sollen, um zu ermitteln, ob die Daten in der jeweiligen Zeile des Abfrageergebnisses maskiert oder tokenisiert werden sollen, wenn auf der ersten Spalte eine Abfrage ausgeführt wird.

Wenn die USING-Klausel weggelassen wird, behandelt Snowflake die bedingte Maskierungsrichtlinie wie eine normale Maskierungsrichtlinie.

OR REPLACE

Gibt an, dass die interaktive Tabelle ersetzt werden soll, wenn sie bereits im Schema vorhanden ist. Dies ist gleichbedeutend mit der Verwendung von DROP TABLE für die vorhandene Tabelle und der anschließenden Erstellung einer neuen Tabelle mit demselben Namen.

IF NOT EXISTS

Gibt an, dass die interaktive Tabelle nur erstellt wird, wenn sie noch nicht im Schema vorhanden ist. Wenn bereits eine Tabelle mit dem gleichen Namen vorhanden ist, ist die Anweisung erfolgreich, ohne dass eine neue Tabelle erstellt wird.

Bemerkung

Die Klauseln OR REPLACE und IF NOT EXISTS schließen sich gegenseitig aus und können nicht beide in derselben Anweisung verwendet werden.

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

Gibt die maximale Verzögerungszeit für die automatische Aktualisierung der interaktiven Tabelle an. Wird dieser Wert angegeben, wird die interaktive Tabelle zu einer dynamischen interaktiven Tabelle, die automatisch aktualisiert wird, um die angegebene Verzögerungszeit der Quelldaten einzuhalten.

  • Der Mindestwert beträgt 60 Sekunden (1 Minute).

  • Wenn keine Einheit angegeben ist, stellt die Zahl Sekunden dar.

  • Wenn TARGET_LAG nicht angegeben ist, wird die Tabelle als statische interaktive Tabelle erstellt.

Wenn TARGET_LAG angegeben wird, ist auch der Parameter WAREHOUSE erforderlich.

WAREHOUSE = warehouse_name

Erforderlich, wenn TARGET_LAG angegeben ist. Gibt das Standard-Warehouse an, das für Aktualisierungsvorgänge verwendet wird, wenn TARGET_LAG festgelegt ist. Dies muss ein Standard-Warehouse sein, kein interaktives Warehouse.

COPY GRANTS

Gibt an, dass die Zugriffsrechte aus der ursprünglichen Tabelle beibehalten werden, wenn eine interaktive Tabelle mit CREATE OR REPLACE INTERACTIVE TABLE ersetzt wird.

Der Parameter kopiert alle Berechtigungen, mit Ausnahme von OWNERSHIP, aus der bestehenden Tabelle in die neue Tabelle. Standardmäßig ist die Rolle, die die Anweisung CREATE INTERACTIVE TABLE ausführt, Eigentümer der neuen Tabelle.

COMMENT = 'string_literal'

Gibt einen Kommentar für die interaktive Tabelle an.

ROW ACCESS POLICY policy_name ON ( col_name [ , col_name ... ] )

Gibt die Zeilenzugriffsrichtlinie an, die für eine Tabelle festgelegt werden soll.

Dieser Parameter wird von der CREATE OR ALTER-Syntaxvariante nicht unterstützt.

AGGREGATION POLICY policy_name [ ENTITY KEY ( col_name [ , col_name ... ] ) ]

Gibt eine Aggregationsrichtlinie an, die für eine Tabelle festgelegt werden soll. Sie können eine oder mehrere Aggregationsrichtlinien auf eine Tabelle anwenden.

Verwenden Sie den optionalen Parameter ENTITY KEY, um festzulegen, welche Spalten eine Entität innerhalb der Tabelle eindeutig identifizieren. Weitere Informationen dazu finden Sie unter Implementieren von Datenschutz auf Entitätsebene mit Aggregationsrichtlinien. Sie können einen oder mehrere Entitätsschlüssel für eine Aggregationsrichtlinie angeben.

JOIN POLICY policy_name [ ALLOWED JOIN KEYS ( col_name [ , ... ] ) ]

Gibt die Verknüpfungsrichtlinie an, die für eine Tabelle festgelegt werden soll.

Verwenden Sie den optionalen Parameter ALLOWED JOIN KEYS, um festzulegen, welche Spalten als Verbindungsspalten verwendet werden dürfen, wenn diese Richtlinie in Kraft ist. Weitere Informationen dazu finden Sie unter Verknüpfungsrichtlinien.

Dieser Parameter wird von der CREATE OR ALTER-Syntaxvariante nicht unterstützt.

STORAGE LIFECYCLE POLICY policy_name ON ( col_name [ , col_name ... ] )

Gibt eine Lebenszyklusrichtlinie des Speichers an, um sie an die Tabelle anzuhängen.

Die in der ON-Klausel angegebenen Spalten müssen mit der Anzahl der Argumente und den Datentypen übereinstimmen, die in der Signatur der Richtlinienfunktion definiert sind. Snowflake verwendet diese Spalten, um den Richtlinienausdruck auszuwerten und zu bestimmen, welche Zeilen archiviert werden sollen oder verfallen.

Wichtig

Wenn Sie einer Tabelle eine Archivspeicherrichtlinie hinzufügen, wird die Tabelle während ihrer Lebensdauer dauerhaft der angegebenen Archivebene zugeordnet. Sie können die Archivebene nicht ändern, indem Sie eine neue Richtlinie anwenden. Sie können zum Beispiel keine Richtlinie angeben, die mit einer COOL-Archivebene in ALTER TABLE…DROP STORAGE LIFECYCLE POLICY erstellt wurde, und anschließend die Tabelle ändern, um eine mit einer COLD-Archivebene erstellte Richtlinie hinzuzufügen. Um die Archivebene für eine Tabelle zu ändern, wenden Sie sich an den Snowflake-Support, damit Sie das Löschen der aktuell archivierten Daten anfordern können. Weitere Hinweise finden Sie unter Archivierungsspeicherrichtlinien.

Weitere Informationen zum Erstellen und Verwalten von Lebenszyklusrichtlinien für Speicher finden Sie unter Create and manage storage lifecycle policies.

Dieser Parameter wird von der CREATE OR ALTER-Syntaxvariante nicht unterstützt.

Anforderungen an die Zugriffssteuerung

Eine Rolle, die zur Ausführung dieser Operation verwendet wird, muss mindestens die folgenden Berechtigungen haben:

Berechtigung

Objekt

Anmerkungen

CREATE INTERACTIVE TABLE

Schema

Erforderlich, um eine interaktive Tabelle im Schema zu erstellen.

SELECT

Tabelle, externe Tabelle, Ansicht

Erforderlich für abgefragte Tabellen und/oder Ansichten in der AS SELECT-Klausel.

APPLY

Maskierungsrichtlinie, Zeilenzugriffsrichtlinie, Tag, Speicherlebenszyklusrichtlinie

Nur erforderlich, wenn beim Erstellen von Tabellen eine Maskierungsrichtlinie, eine Zeilenzugriffsrichtlinie, Objekt-Tags, eine Speicherlebenszyklusrichtlinie oder eine beliebige Kombination dieser Governance-Features angewendet wird.

USAGE

Datenbank, Schema

Erforderlich für die Datenbank und das Schema, die die interaktive Tabelle enthalten.

USAGE

Warehouse

Erforderlich für das im WAREHOUSE-Parameter angegebene Warehouse (bei Verwendung von TARGET_LAG).

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

  • Interaktive Tabellen müssen mit einem Standard-Warehouse erstellt werden, nicht mit einem interaktiven Warehouse.

  • Die CLUSTER BY-Klausel ist für alle interaktiven Tabellen erforderlich und beeinflusst die Abfrageleistung erheblich. Wählen Sie Clustering-Spalten sorgfältig auf der Grundlage Ihrer am häufigsten verwendeten WHERE-Klauselmuster aus.

  • Interaktive Tabellen bieten die beste Leistung, wenn sie über interaktive Warehouses abgefragt werden. So erzielen Sie eine optimale Leistung für eine interaktive Tabelle:

    1. Erstellen Sie ein interaktives Warehouse.

    2. Verknüpfen Sie die interaktive Tabelle mit dem interaktiven Warehouse unter Verwendung von ALTER WAREHOUSE … ADD TABLES.

    3. Setzen Sie das interaktive Warehouse fort.

    4. Verwenden Sie das interaktive Warehouse, um die interaktive Tabelle abzufragen.

  • Interaktive Tabellen unterstützen im Vergleich zu Standardtabellen eine begrenzte Anzahl von SQL-Vorgängen:

    • SELECT-Anweisungen mit WHERE-Klauseln sind optimiert.

    • Einfache GROUP BY-Vorgänge werden unterstützt.

    • DML-Vorgänge (INSERT, UPDATE, DELETE) werden nicht unterstützt. Der einzige erlaubte DML-Vorgang ist INSERT OVERWRITE.

    • Komplexe Abfragevorgänge haben möglicherweise nur begrenzte Leistungsvorteile.

  • Dynamische interaktive Tabellen (mit TARGET_LAG) werden automatisch unter Verwendung des angegebenen Standard-Warehouses aktualisiert. Die Verzögerungszeit sorgt für ein Gleichgewicht zwischen Datenaktualität und Computekosten.

  • Static interactive tables don’t automatically refresh. They require manual updates to reflect changes in source data. To do so, run a CREATE OR REPLACE command or an INSERT OVERWRITE command on the interactive table.

  • Eine einzelne Maskierungsrichtlinie, die bedingte Spalten verwendet, kann auf mehrere Tabellen angewendet werden, sofern die Spaltenstruktur der Tabelle mit den in der Richtlinie angegebenen Spalten übereinstimmt.

  • Wenn Sie eine Tabelle mit Maskierungsrichtlinie auf einer oder mehreren Tabellenspalten oder die Tabelle selbst mit Zeilenzugriffsrichtlinie ändern, dann können Sie mit der Funktion POLICY_CONTEXT eine Abfrage auf den mit Maskierungsrichtlinie geschützten Spalten bzw. auf der mit einer Zeilenzugriffsrichtlinie geschützten Tabelle simulieren.

  • Interaktive Tabellen speichern zusätzliche Metadaten und Indexinformationen, um Abfragen zu beschleunigen. Diese Daten sind jedoch komprimiert und haben nur minimale Auswirkungen auf die Speichergröße.

  • Metadaten:

    Achtung

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

  • Zum Erstellen einer Tabelle mit der WITH STORAGE LIFECYCLE POLICY-Klausel:

    • Sie müssen über die erforderlichen Berechtigungen verfügen, um die Richtlinie anwenden zu können. Weitere Informationen zu den erforderlichen Berechtigungen finden Sie unter Storage lifecycle policy privileges.

    • Einer Tabelle kann nur genau eine Speicherlebenszyklusrichtlinie zugeordnet sein.

    • Die Anzahl der Spalten muss mit der Anzahl der Argumente in der Signatur der Richtlinienfunktion übereinstimmen und die Spaltendaten müssen mit den Argumenttypen kompatibel sein.

    • Verknüpfte Richtlinien sind nicht betroffen, wenn Sie Tabellenspalten umbenennen. Snowflake ordnet Richtlinien mithilfe der Spalten-IDs zu.

    • Um Ausdrücke von Speicherlebenszyklusrichtlinien auszuwerten und anzuwenden, umgeht Snowflake intern und vorübergehend alle Governance-Richtlinien einer Tabelle.

Variantensyntax: Statische interaktive Tabelle

Erstellt eine statische interaktive Tabelle, die einmal von der Quellabfrage gefüllt wird:

CREATE [ OR REPLACE ] INTERACTIVE TABLE <table_name>
  CLUSTER BY ( <expr> [ , <expr> , ... ] )
  [ COPY GRANTS ]
  [ COMMENT = '<string_literal>' ]
  AS <query>
Copy

Static interactive tables don’t automatically refresh. They require manual updates to reflect changes in source data. To do so, run a CREATE OR REPLACE command or an INSERT OVERWRITE command on the interactive table.

Variantensyntax: Dynamische interaktive Tabelle

Erstellt eine dynamische interaktive Tabelle, die automatisch auf der Grundlage der angegebenen Verzögerungszeit aktualisiert wird:

CREATE [ OR REPLACE ] INTERACTIVE TABLE <table_name>
  CLUSTER BY ( <expr> [ , <expr> , ... ] )
  TARGET_LAG = '<num> { seconds | minutes | hours | days }'
  WAREHOUSE = <warehouse_name>
  [ COPY GRANTS ]
  [ COMMENT = '<string_literal>' ]
  AS <query>
Copy

Dynamische interaktive Tabellen werden automatisch aktualisiert, um innerhalb des angegebenen TARGET_LAG der Quelldaten zu bleiben. Bei Aktualisierungsvorgängen wird das angegebene Standard-Warehouse verwendet.

Beispiele

Die folgenden Beispiele zeigen verschiedene Möglichkeiten, wie Sie interaktive Tabellen erstellen können, und geben dabei die Quelle der zugehörigen Daten an und wie die Daten aktualisiert werden können.

Einfache statische interaktive Tabelle

Erstellen Sie eine statische interaktive Tabelle aus vorhandenen Auftragsdaten, die nach Kunde und Datum gruppiert sind, um eine optimale Abfrageleistung zu erzielen:

CREATE INTERACTIVE TABLE orders_interactive
  CLUSTER BY (customer_id, order_date)
  COMMENT = 'Interactive table for real-time order analytics'
AS
  SELECT customer_id, order_date, product_id, quantity, total_amount
  FROM orders_staging
  WHERE order_date >= '2024-01-01';
Copy

Dynamische interaktive Tabelle mit automatischer Aktualisierung

Erstellen Sie eine dynamische interaktive Tabelle, die alle 5 Minuten aktualisiert wird, um Verkaufszusammenfassungen nahezu in Echtzeit zu erhalten:

CREATE INTERACTIVE TABLE sales_summary_interactive
  CLUSTER BY (region, product_category)
  TARGET_LAG = '5 minutes'
  WAREHOUSE = refresh_warehouse
  COMMENT = 'Real-time sales dashboard data'
AS
  SELECT
    region,
    product_category,
    SUM(sales_amount) as total_sales,
    COUNT(*) as transaction_count,
    AVG(sales_amount) as avg_sale
  FROM sales_data
  GROUP BY region, product_category;
Copy

Mehrspaltiges Clustering für komplexe Abfragen

Erstellen Sie eine interaktive Tabelle mit mehrspaltigem Clustering, das für verschiedene Abfragemuster optimiert ist:

CREATE INTERACTIVE TABLE customer_analytics_interactive
  CLUSTER BY (customer_tier, region, signup_date)
  TARGET_LAG = '10 minutes'
  WAREHOUSE = analytics_warehouse
AS
  SELECT
    customer_id,
    customer_tier,
    region,
    signup_date,
    total_orders,
    lifetime_value,
    last_order_date
  FROM customer_metrics
  WHERE customer_tier IN ('GOLD', 'PLATINUM', 'DIAMOND');
Copy

Bestehende interaktive Tabelle ersetzen

Ersetzen Sie eine vorhandene interaktive Tabelle durch aktualisierte Clustering- und Aktualisierungseinstellungen:

CREATE OR REPLACE INTERACTIVE TABLE product_performance_interactive
  CLUSTER BY (category, brand, launch_date)
  TARGET_LAG = '2 minutes'
  WAREHOUSE = fast_refresh_warehouse
  COPY GRANTS
AS
  SELECT
    product_id,
    category,
    brand,
    launch_date,
    units_sold,
    revenue,
    customer_rating
  FROM product_sales_view
  WHERE launch_date >= DATEADD('month', -6, CURRENT_DATE());
Copy