CREATE MATERIALIZED VIEW¶
Erstellt eine neue materialisierte Ansicht im aktuellen/angegebenen Schema auf Grundlage einer Abfrage einer vorhandenen Tabelle und füllt die Ansicht mit entsprechenden Daten aus.
Weitere Details dazu finden Sie unter Verwenden von materialisierten Ansichten.
- Siehe auch:
ALTER MATERIALIZED VIEW, DROP MATERIALIZED VIEW, SHOW MATERIALIZED VIEWS, DESCRIBE MATERIALIZED VIEW
Syntax¶
CREATE [ OR REPLACE ] [ SECURE ] MATERIALIZED VIEW [ IF NOT EXISTS ] <name>
[ COPY GRANTS ]
( <column_list> )
[ <col1> [ WITH ] MASKING POLICY <policy_name> [ USING ( <col1> , <cond_col1> , ... ) ]
[ WITH ] PROJECTION POLICY <policy_name>
[ WITH ] TAG ( <tag_name> = '<tag_value>' [ , <tag_name> = '<tag_value>' , ... ] ) ]
[ , <col2> [ ... ] ]
[ COMMENT = '<string_literal>' ]
[ [ WITH ] ROW ACCESS POLICY <policy_name> ON ( <col_name> [ , <col_name> ... ] ) ]
[ [ WITH ] AGGREGATION POLICY <policy_name> ]
[ [ WITH ] TAG ( <tag_name> = '<tag_value>' [ , <tag_name> = '<tag_value>' , ... ] ) ]
[ CLUSTER BY ( <expr1> [, <expr2> ... ] ) ]
AS <select_statement>
Erforderliche Parameter¶
name
Gibt den Bezeichner für die Ansicht an. Dieser muss für das Schema, in dem die Ansicht 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.
select_statement
Gibt die Abfrage an, die zum Erstellen der Ansicht verwendet wird. Diese Abfrage dient als Text/Definition für die Ansicht. Diese Abfrage wird in der Ausgabe von SHOW VIEWS und SHOW MATERIALIZED VIEWS angezeigt.
Für
select_statement
gelten Einschränkungen. Weitere Details dazu finden Sie unter:
Optionale Parameter¶
column_list
:Wenn Sie nicht möchten, dass die Spaltennamen in der Ansicht den Spaltennamen der zugrunde liegenden Tabelle entsprechen, können Sie eine Spaltenliste hinzufügen, in der Sie die Spaltennamen angeben. (Sie müssen die Datentypen der Spalten nicht angeben.)
Wenn Sie eine CLUSTER BY-Klausel für die materialisierte Ansicht angeben, müssen Sie die Spaltennamenliste einschließen.
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.
PROJECTION POLICY policy_name
Gibt die Projektionsrichtlinie an, die für eine Spalte festgelegt werden soll.
string_literal
Gibt einen Kommentar für die Ansicht an. Das Zeichenfolgenliteral sollte in einfache Anführungszeichen gesetzt werden. (Das Zeichenfolgenliteral sollte keine einfachen Anführungszeichen enthalten, es sei denn, es werden Escapezeichen verwendet.)
Standard: Kein Wert.
expr#
Gibt einen Ausdruck an, für den die materialisierte Ansicht geclustert werden soll. Normalerweise ist jeder Ausdruck der Name einer Spalte in der materialisierten Ansicht.
Weitere Informationen zum Clustering materialisierter Ansichten finden Sie unter Materialisierte Ansichten und Clustering. Weitere allgemeine Informationen zum Clustering finden Sie unter Was ist Daten-Clustering?.
SECURE
Gibt an, dass die Ansicht sicher ist. Weitere Informationen zu sicheren Ansichten finden Sie unter Verwenden von sicheren Ansichten.
Standard: Kein Wert (Ansicht ist nicht sicher)
COPY GRANTS
Wenn Sie eine vorhandene Ansicht mithilfe der
OR REPLACE
-Klausel ersetzen, behält die Ersatzansicht die Zugriffsberechtigungen der ursprünglichen Ansicht bei. Dieser Parameter kopiert alle Berechtigungen, außer OWNERSHIP, aus der vorhandenen Ansicht in die neue Ansicht. Die neue Ansicht übernimmt keine zukünftigen Berechtigungen, die für den Objekttyp im Schema definiert werden. Die Rolle, die die Anweisung CREATE MATERIALIZED VIEW ausführt, besitzt standardmäßig die neue Ansicht.Wenn der Parameter nicht in der CREATE VIEW-Anweisung enthalten ist, übernimmt die neue Ansicht keine expliziten Zugriffsberechtigungen für die ursprüngliche Ansicht, übernimmt aber alle zukünftigen Berechtigungen, die für den Objekttyp im Schema definiert werden.
Beachten Sie, dass die Operation zum Kopieren von Berechtigungen atomar mit der CREATE VIEW-Anweisung erfolgt (d. h. innerhalb derselben Transaktion).
Standard: Kein Wert (Berechtigungen werden nicht kopiert)
ROW ACCESS POLICY policy_name ON ( col_name [ , col_name ... ] )
Gibt die Zeilenzugriffsrichtlinie an, die für die materialisierte Ansicht festgelegt werden soll.
AGGREGATION POLICY policy_name
Gibt die Aggregationsrichtlinie an, die für die materialisierte Ansicht festgelegt werden soll.
TAG ( tag_name = 'tag_value' [ , tag_name = 'tag_value' , ... ] )
Gibt den Namen des Tags und den Wert der Tag-Zeichenfolge an.
Der Tag-Wert ist immer eine Zeichenfolge, die maximale 256 Zeichen lang sein kann.
Weitere Informationen zur Angabe von Tags in einer Anweisung finden Sie unter Tag-Kontingente für Objekte und Spalten.
Nutzungshinweise¶
Das Erstellen einer materialisierten Ansicht erfordert die CREATE MATERIALIZED VIEW-Berechtigung für das Schema und die SELECT-Berechtigung für die Basistabelle. Weitere Informationen zu Berechtigungen und materialisierten Ansichten finden Sie unter Berechtigungen für das Schema einer materialisierten Ansicht.
Wenn Sie einen Namen für die materialisierte Ansicht wählen, beachten Sie, dass ein Schema keine Tabelle und keinen Ansicht gleichen Namens enthalten darf. Eine CREATE [ MATERIALIZED ] VIEW-Anweisung erzeugt einen Fehler, wenn im Schema bereits eine Tabelle mit dem gleichen Namen existiert.
Beachten Sie bei der Angabe von
select_statement
das Folgende:Sie Dürfen weder eine HAVING-Klausel noch eine ORDER BY-Klausel angeben.
Wenn Sie eine CLUSTER BY-Klausel für die materialisierte Ansicht angeben, müssen Sie die
column_list
-Klausel einfügen.Wenn Sie in
select_statement
mehr als einmal auf die Basistabelle verweisen, verwenden Sie für alle Verweise auf die Basistabelle denselben Qualifizierer.Verwenden Sie z. B. keine Mischung aus
base_table
,schema.base_table
unddatabase.schema.base_table
in derselbenselect_statement
-Abfrage. Wählen Sie stattdessen eine dieser Formen (z. B.database.schema.base_table
) aus, und verwenden Sie diese konsistent in der gesamtenselect_statement
-Abfrage.In der SELECT-Anweisung dürfen keine Streamobjekte abgefragt werden. Streams sind nicht als Quellobjekte für Ansichten oder materialisierte Ansichten vorgesehen.
Einige Spaltennamen sind in materialisierten Ansichten nicht zulässig. Wenn ein Spaltenname nicht zulässig ist, können Sie einen Alias für die Spalte definieren. Weitere Details dazu finden Sie unter Behandeln von Spaltennamen, die in materialisierten Ansichten nicht zulässig sind.
Wenn die materialisierte Ansicht externe Tabellen abfragt, müssen Sie die Metadaten auf Dateiebene für die externen Tabellen aktualisieren, um Änderungen am referenzierten Cloudspeicherort zu übernehmen, einschließlich neuer, aktualisierter und entfernter Dateien.
Sie können die Metadaten einer externen Tabelle automatisch über den Ereignisbenachrichtigungsdienst Ihres Cloudspeicherdienstes oder manuell mit ALTER EXTERNAL TABLE … REFRESH-Anweisungen aktualisieren.
Für materialisierte Ansichten gelten andere Einschränkungen. Weitere Details dazu finden Sie unter Einschränkungen beim Erstellen materialisierter Ansichten und Einschränkungen bei der Verwendung von materialisierten Ansichten.
Ansichtsdefinitionen werden nicht aktualisiert, wenn das Schema der zugrunde liegenden Quelltabelle geändert wird, sodass die Ansichtsdefinition ungültig wird. Beispiel:
Eine Ansicht wird aus einer Basistabelle erstellt, und anschließend wird aus dieser Basistabelle eine Spalte gelöscht.
Die Basistabelle der materialisierten Ansicht wird gelöscht.
In diesen Szenarios gibt die Abfrage auf der Ansicht einen Fehler zurück, der den Grund angibt, warum die Ansicht ungültig ist. Beispiel:
Failure during expansion of view 'MV1': SQL compilation error: Materialized View MV1 is invalid. Invalidation reason: DDL Statement was executed on the base table 'MY_INVENTORY'. Marked Materialized View as invalid.
Wenn dies auftritt, können Sie Folgendes tun:
Wenn die Basistabelle gelöscht wurde und dies innerhalb der Datenaufbewahrungsfrist von Time Travel liegt, können Sie die Basistabelle wiederherstellen (UNDROP), wodurch die materialisierte Ansicht wieder gültig wird.
Verwenden Sie den Befehl CREATE OR REPLACE MATERIALIZED VIEW, um die Ansicht erneut zu erstellen:
Metadaten:
Achtung
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.
Die Verwendung von
OR REPLACE
ist gleichbedeutend mit der Ausführung von DROP MATERIALIZED VIEW auf der vorhandenen materialisierten Ansicht und der anschließenden Erstellung einer neuen Ansicht mit demselben Namen.CREATE OR REPLACE <Objekt>-Anweisungen sind atomar. Das heißt, wenn ein Objekt ersetzt wird, erfolgt das Löschen des alten Objekts und das Erstellen des neuen Objekts in einer einzigen Transaktion.
Das bedeutet, dass alle Abfragen, die gleichzeitig mit der Operation CREATE OR REPLACE MATERIALIZED VIEW ausgeführt werden, entweder die alte oder die neue Version der materialisierten Ansicht verwenden.
Wenn Sie eine materialisierte Ansicht mit Maskierungsrichtlinie auf einer oder mehreren Spalten oder die materialisierte Ansicht 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 materialisierten Ansicht simulieren.
Beispiele¶
Erstellen Sie im aktuellen Schema eine materialisierte Ansicht inklusive Kommentar, die alle Zeilen einer Tabelle auswählt:
CREATE MATERIALIZED VIEW mymv COMMENT='Test view' AS SELECT col1, col2 FROM mytable;
Weitere Beispiele finden Sie in den Beispielen in Verwenden von materialisierten Ansichten.