CREATE MATERIALIZED VIEW
Gilt für: Databricks SQL
Eine materialisierte Sicht ist eine Sicht, in der vorberechnete Ergebnisse für Abfragen verfügbar sind und aktualisiert werden können, um Änderungen in der Eingabe widerzuspiegeln. Jedes Mal, wenn eine materialisierte Sicht aktualisiert wird, werden die Abfrageergebnisse neu berechnet, um Änderungen in Upstream-Datasets widerzuspiegeln. Alle materialisierten Sichten werden von einer DLT-Pipeline unterstützt. Sie können materialisierte Sichten manuell oder geplant aktualisieren.
Weitere Informationen zum Ausführen einer manuellen Aktualisierung finden Sie unter REFRESH (MATERIALIZED VIEW oder STREAMING TABLE).
Weitere Informationen zum Planen einer Aktualisierung finden Sie unter Beispiele und ALTER MATERIALIZED VIEW.
Hinweis
Erstellungs- und Aktualisierungsvorgänge für materialisierte Sichten und Streamingtabellen werden von einer serverlosen Delta Live Tables-Pipeline unterstützt. Sie können mit dem Katalog-Explorer Details zu den unterstützenden Pipelines auf der Benutzeroberfläche anzeigen. Weitere Informationen finden Sie unter Was ist der Katalog-Explorer?.
Syntax
{ CREATE OR REPLACE MATERIALIZED VIEW | CREATE MATERIALIZED VIEW [ IF NOT EXISTS ] }
view_name
[ column_list ]
[ view_clauses ]
[schedule_clause]
AS query
column_list
( { column_name column_type column_properties } [, ...]
[ , table_constraint ] [...])
column_properties
{ NOT NULL | COMMENT column_comment | column_constraint | MASK clause } [ ... ]
view_clauses
{ PARTITIONED BY (col [, ...]) |
COMMENT view_comment |
TBLPROPERTIES clause |
SCHEDULE [ REFRESH ] schedule_clause |
WITH { ROW FILTER clause } } [...]
schedule_clause
{ EVERY number { HOUR | HOURS | DAY | DAYS | WEEK | WEEKS } |
CRON cron_string [ AT TIME ZONE timezone_id ] }
Parameter
REPLACE
Wenn dies angegeben wird, werden die Sicht und deren Inhalt ersetzt, sofern bereits vorhanden.
IF NOT EXISTS
Erstellt die Sicht nur, wenn sie nicht vorhanden ist. Wenn bereits eine Sicht mit diesem Namen vorhanden ist, wird die
CREATE MATERIALIZED VIEW
-Anweisung ignoriert.Sie können nur eines von
IF NOT EXISTS
oderOR REPLACE
angeben.-
Der Name der neu erstellten Ansicht. Der vollqualifizierte Ansichtsname muss eindeutig sein.
column_list
Bezeichnet optional die Spalten im Abfrageergebnis der Ansicht. Wenn Sie eine Spaltenliste bereitstellen, muss die Anzahl der Spaltenaliase mit der Anzahl der Ausdrücke in der Abfrage übereinstimmen. Falls keine Spaltenliste angegeben ist, werden Aliase vom Text der Ansicht abgeleitet.
-
Die Spaltennamen müssen eindeutig sein und mit den Ausgabespalten der Abfrage übereinstimmen.
column_type
Gibt den Datentyp der Spalte an. Nicht alle von Azure Databricks unterstützten Datentypen werden von materialisierten Sichten unterstützt.
column_comment
Ein optionales
STRING
-Literal, das den Spaltennamen beschreibt. Diese Option muss zusammen mitcolumn_type
angegeben werden. Wenn der Spaltentyp nicht angegeben ist, wird der Spaltenkommentar übersprungen.column_constraint
Fügt der Spalte in einer materialisierten Sicht einen informativen Primärschlüssel oder eine informative Fremdschlüsseleinschränkung hinzu. Wenn der Spaltentyp nicht angegeben ist, wird die Spalteneinschränkung übersprungen.
-
Wichtig
Dieses Feature befindet sich in der Public Preview.
Fügt eine Spaltenmaskierungsfunktion hinzu, um vertrauliche Zeichenfolgenwerte zu anonymisieren. Alle zukünftigen Abfragen von dieser Spalte erhalten das Ergebnis der Auswertung dieser Funktion über die Spalte anstelle des ursprünglichen Wertes der Spalte. Dies kann für eine präzise Zugriffssteuerung nützlich sein, bei der die Funktion die Identität oder Gruppenmitgliedschaft der aufrufenden Benutzer überprüfen kann, um zu entscheiden, ob der Wert zurückgezogen werden soll. Wenn der Spaltentyp nicht angegeben ist, wird die Spaltenmaske übersprungen.
-
table_constraint
Fügt der Tabelle in einer materialisierten Sicht einen informativen Primärschlüssel oder eine informative Fremdschlüsseleinschränkung hinzu. Wenn der Spaltentyp nicht angegeben ist, wird die Tabelleneinschränkung übersprungen.
view_clauses
Geben Sie optional Partitionierung, Kommentare, benutzerdefinierte Eigenschaften und einen Aktualisierungszeitplan für die neue materialisierte Sicht an. Jede Unterklausel kann nur einmal angegeben werden.
-
Eine optionale Liste der Spalten der Tabelle, nach denen die Tabelle partitioniert werden soll.
COMMENT view_comment
Ein
STRING
-Literal zum Beschreiben der Tabelle.-
Legt optional eine oder mehrere benutzerdefinierte Eigenschaften fest.
Verwenden Sie diese Einstellung, um den Laufzeitkanal delta Live Tables anzugeben, der zum Ausführen dieser Anweisung verwendet wird. Legen Sie den Wert der
pipelines.channel
Eigenschaft auf"PREVIEW"
oder"CURRENT"
. Der Standardwert ist"CURRENT"
. Weitere Informationen zu Delta Live Tables-Kanälen finden Sie unter Delta Live Tables-Laufzeitkanäle. SCHEDULE [ REFRESH ] schedule_clause
EVERY number { HOUR | HOURS | DAY | DAYS | WEEK | WEEKS }
Wichtig
Dieses Feature befindet sich in der Public Preview.
Verwenden Sie
EVERY
die Syntax, um eine aktualisierung zu planen, die in regelmäßigen Abständen auftritt. WennEVERY
die Syntax angegeben ist, wird die Streamingtabelle oder materialisierte Ansicht regelmäßig im angegebenen Intervall aktualisiert, basierend auf dem angegebenen Wert, zHOUR
. B. , ,HOURS
,DAY
,DAYS
,WEEK
oderWEEKS
. In der folgenden Tabelle sind akzeptierte ganzzahlige Werte fürnumber
.Zeiteinheit Ganzzahliger Wert HOUR or HOURS
1 <= H <= 72 DAY or DAYS
1 <= D <= 31 WEEK or WEEKS
1 <= W <= 8 Hinweis
Die Singular- und Pluralformen der enthaltenen Zeiteinheit sind semantisch gleichwertig.
CRON cron_string [ AT TIME ZONE timezone_id ]
Um eine Aktualisierung mit einem Quarz-Cron-Wert zu planen. Gültige time_zone_values werden akzeptiert.
AT TIME ZONE LOCAL
wird nicht unterstützt.Fehlt
AT TIME ZONE
, wird die Sitzungszeitzone verwendet. WennAT TIME ZONE
fehlt und die Sitzungszeitzone nicht festgelegt ist, wird ein Fehler ausgelöst.SCHEDULE
ist semantisch äquivalent mitSCHEDULE REFRESH
.
WITH ROW FILTER-Klausel
Wichtig
Dieses Feature befindet sich in der Public Preview.
Fügt der Tabelle eine Zeilenfilterfunktion hinzu. Alle zukünftigen Abfragen von dieser Tabelle erhalten eine Teilmenge der Zeilen, in denen die Funktion als boolescher WAHR ausgewertet wird. Dies kann für eine fein abgestufte Zugriffssteuerung nützlich sein, bei der die Funktion die Identität oder Gruppenmitgliedschaften der aufrufenden Benutzer überprüfen kann, um zu entscheiden, ob bestimmte Spalten gefiltert werden sollen.
-
AS query
Eine Abfrage, die die Sicht aus Basistabellen oder anderen Sichten erstellt.
Erforderliche Berechtigungen
Der Benutzer, der eine materialisierte Sicht (Materialized View, MV) erstellt, ist der MV-Besitzer und benötigt die folgenden Berechtigungen:
SELECT
-Berechtigung für die Basistabellen, auf die von der materialisierten Sicht verwiesen wird.USE CATALOG
-Berechtigung für den übergeordneten Katalog undUSE SCHEMA
-Berechtigung für das übergeordnete SchemaCREATE MATERIALIZED VIEW
-Berechtigung für das Schema für die materialisierte Sicht.
Damit ein Benutzer die materialisierte Sicht aktualisieren kann, wird Folgendes erfordert:
USE CATALOG
-Berechtigung für den übergeordneten Katalog undUSE SCHEMA
-Berechtigung für das übergeordnete Schema- Besitz der materialisierten Sicht oder
REFRESH
-Berechtigung für die materialisierte Sicht - Der Besitzer benötigt die
SELECT
-Berechtigung für die Basistabellen, auf die die materialisierte Sicht verweist.
Damit ein Benutzer die materialisierte Sicht abfragen kann, wird Folgendes erfordert:
USE CATALOG
-Berechtigung für den übergeordneten Katalog undUSE SCHEMA
-Berechtigung für das übergeordnete SchemaSELECT
-Berechtigung für die materialisierte Sicht.
Zeilenfilter und Spaltenmasken
Wichtig
Dieses Feature befindet sich in der Public Preview.
Mit Zeilenfiltern können Sie eine Funktion angeben, die als Filter gilt, wenn ein Tabellenscan Zeilen abruft. Mit diesen Filtern können Sie sicherstellen, dass nachfolgende Abfragen nur Zeilen zurückgeben, für die das Filterprädikat zu TRUE ausgewertet wird.
Mit Spaltenmasken können Sie die Werte einer Spalte immer filtern, wenn ein Tabellenscan Zeilen abruft. Alle zukünftigen Abfragen dieser Spalte erhalten das Ergebnis der Auswertung dieser Funktion für die Spalte, das den ursprünglichen Spaltenwert ersetzt.
Weitere Informationen zur Verwendung von Zeilenfiltern und Spaltenmasken finden Sie unter Filtern vertraulicher Tabellendaten mit Zeilenfiltern und Spaltenmasken.
Verwalten von Zeilenfiltern und Spaltenmasken
Zeilenfilter und Spaltenmasken für materialisierte Sichten sollten mithilfe der CREATE
-Anweisung hinzugefügt werden.
Behavior
- Als Definierer aktualisieren: Wenn die
REFRESH MATERIALIZED VIEW
-Anweisung eine materialisierte Sicht aktualisiert, werden Zeilenfilterfunktionen mit den Berechtigungen des Definierers (als Tabellenbesitzer) ausgeführt. Dies bedeutet, dass die Tabellenaktualisierung den Sicherheitskontext des Benutzers verwendet, der die materialisierte Sicht erstellt hat. - Abfrage: Während die meisten Filter mit den Berechtigungen des Definierers ausgeführt werden, sind Funktionen wie
CURRENT_USER
undIS_MEMBER
, die den Benutzerkontext überprüfen, die Ausnahme. Diese Funktionen werden als Aufrufer ausgeführt. Durch diese Vorgehensweise werden benutzerspezifische Datensicherheit und Zugriffssteuerungen basierend auf dem Kontext des aktuellen Benutzers erzwungen. - Beim Erstellen materialisierter Sichten über Quelltabellen, die Zeilenfilter und Spaltenmasken enthalten, ist die Aktualisierung der materialisierten Sicht immer eine vollständige Aktualisierung. Bei einer vollständigen Aktualisierung werden alle in der Quelle verfügbaren Daten mit den neuesten Definitionen aktualisiert. Dadurch wird sichergestellt, dass Sicherheitsrichtlinien der Quelltabellen ausgewertet und mit den aktuellen Daten und Definitionen aktualisiert werden.
Einblick
Verwenden Sie DESCRIBE EXTENDED
, INFORMATION_SCHEMA
oder den Katalog-Explorer, um die vorhandenen Zeilenfilter und Spaltenmasken zu untersuchen, die für eine bestimmte materialisierte Sicht gelten. Mit dieser Funktionalität können Benutzer Datenzugriffs- und Schutzmaßnahmen für materialisierte Sichten überwachen und überprüfen.
Begrenzungen
- Wenn für eine materialisierte Sicht mit einem
sum
-Aggregat für eine NULL-Werte zulassende Spalte der letzte Wert ungleich NULL aus dieser Spalte entfernt wurde und somit nurNULL
-Werte in dieser Spalte verbleiben, gibt der resultierende Aggregatwert der materialisierten Sicht NULL anstelle vonNULL
zurück. - Spaltenverweise erfordern keinen Alias. Ausdrücke für Nicht-Spaltenverweise erfordern einen Alias, wie im folgenden Beispiel angezeigt:
- Zulässig:
SELECT col1, SUM(col2) AS sum_col2 FROM t GROUP BY col1
- Nicht zulässig:
SELECT col1, SUM(col2) FROM t GROUP BY col1
- Zulässig:
NOT NULL
muss zusammen mitPRIMARY KEY
manuell angegeben werden, um eine gültige Anweisung darzustellen.- Materialisierte Sichten unterstützen keine Identitätsspalten oder Ersatzschlüssel.
- Materialisierte Sichten unterstützen nicht die Befehle
OPTIMIZE
undVACUUM
. Die Wartung erfolgt automatisch. - Materialisierte Sichten unterstützen keine Erwartungen zum Definieren von Datenqualitätseinschränkungen.
Beispiele
-- Create a materialized view if it doesn't exist
> CREATE MATERIALIZED VIEW IF NOT EXISTS subscribed_movies
AS SELECT mo.member_id, mb.full_name, mo.movie_title
FROM movies AS mo INNER JOIN members AS mb ON mo.member_id = mb.id;
-- Create and schedule a materialized view to be refreshed daily at midnight.
-- Note: All columns in a GROUP BY need to be explicitly aliased
> CREATE MATERIALIZED VIEW daily_sales
COMMENT 'Daily sales numbers'
SCHEDULE CRON '0 0 0 * * ? *'
AS SELECT date AS date, sum(sales) AS sumOfSales
FROM table1
GROUP BY date;
-- Sets the runtime channel to "PREVIEW"
> CREATE MATERIALIZED VIEW mv_preview
TBLPROPERTIES(pipelines.channel = "PREVIEW")
AS SELECT * FROM RANGE(10)
-- Create a materialized view with a table constraint
> CREATE MATERIALIZED VIEW IF NOT EXISTS subscribed_movies(
member_id int NOT NULL,
full_name string,
movie_title string,
CONSTRAINT movie_pk PRIMARY KEY(member_id)
)
AS SELECT mo.member_id, mb.full_name, mo.movie_title
FROM movies AS mo INNER JOIN members AS mb ON mo.member_id = mb.id;
-- Create or replace the materialized view to remove the table constraint and add a partition
> CREATE OR REPLACE MATERIALIZED VIEW subscribed_movies
PARTITIONED BY (member_id)
AS SELECT mo.member_id, mb.full_name, mo.movie_title
FROM movies AS mo INNER JOIN members AS mb ON mo.member_id = mb.id;
-- Create a materialized view with a row filter and a column mask
> CREATE MATERIALIZED VIEW masked_view (
id int,
name string,
region string,
ssn string MASK catalog.schema.ssn_mask_fn
)
WITH ROW FILTER catalog.schema.us_filter_fn ON (region)
AS SELECT id, name, region, ssn
FROM employees;