Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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 Ansichten werden von einer ETL-Datenpipeline unterstützt. Sie können materialisierte Sichten manuell oder nach einem Zeitplan 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 oder ALTER MATERIALIZED VIEW.
Materialisierte Ansichten können nur mit einem Pro- oder Serverless SQL Warehouse oder innerhalb einer Pipeline erstellt werden.
Hinweis
Erstellen und Aktualisieren von Vorgängen für materialisierte Ansichten und Streamingtabellen werden von serverlosen Lakeflow Spark Declarative Pipelines unterstützt. Sie können mit dem Katalog-Explorer Details zu den unterstützenden Pipelines auf der Benutzeroberfläche anzeigen. Siehe Was ist der Katalog-Explorer?.
Syntax
{ CREATE OR REPLACE MATERIALIZED VIEW | CREATE MATERIALIZED VIEW [ IF NOT EXISTS ] }
view_name
[ column_list ]
[ view_clauses ]
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 [, ...]) |
CLUSTER BY clause |
COMMENT view_comment |
DEFAULT COLLATION UTF8_BINARY |
TBLPROPERTIES clause |
SCHEDULE [ REFRESH ] schedule_clause |
schedule |
WITH { ROW FILTER clause } } [...]
schedule
{ SCHEDULE [ REFRESH ] schedule_clause |
TRIGGER ON UPDATE [ AT MOST EVERY trigger_interval ] }
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).
WENN NICHT EXISTIERT
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
IF NOT EXISTSoderOR REPLACEangeben.-
Der Name der neu erstellten Sicht. Der vollqualifizierte Anzeigename muss eindeutig sein.
column_list
Bezeichnet optional die Spalten im Abfrageergebnis der Sicht. 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 Sicht abgeleitet.
-
Die Spaltennamen müssen eindeutig sein und mit den Ausgabespalten der Abfrage übereinstimmen.
Spaltentyp
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 die Spalte beschreibt. Diese Option muss zusammen mitcolumn_typeangegeben 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.
-
Fügt eine Spaltenmaskierungsfunktion hinzu, um vertrauliche Daten zu anonymisieren. Alle nachfolgenden Abfragen dieser Spalte erhalten das Ergebnis der Auswertung dieser Funktion anstelle des ursprünglichen Werts der Spalte. Dies kann für eine präzise Zugriffssteuerung nützlich sein, bei der die Funktion die Identität oder Gruppenmitgliedschaft der aufrufenden Benutzenden überprüfen kann, um zu bestimmen, ob der Wert zurückgezogen werden soll. Wenn der Spaltentyp nicht angegeben ist, wird die Spaltenmaske übersprungen.
-
Tabellenbeschränkung
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 die 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.
Hinweis
Flüssigkeitsclustering bietet eine flexible, optimierte Lösung für Clustering. Erwägen Sie die Verwendung von
CLUSTER BYanstelle vonPARTITIONED BYfür materialisierte Ansichten. -
Eine optionale Klausel zum Gruppieren nach einer Teilmenge von Spalten. Verwenden Sie automatische Flüssigclustering mit
CLUSTER BY AUTO, und Databricks wählt intelligent Clustering-Schlüssel aus, um die Abfrageleistung zu optimieren. Siehe Verwenden von Flüssigclustering für Tabellen.Flüssigkeitsclustering kann nicht mit
PARTITIONED BYkombiniert werden. KOMMENTAR anzeigen
Ein
STRING-Literal zum Beschreiben der Tabelle.STANDARD-KOLLATIONIERUNG UTF8_BINARY
Gilt für:
Databricks SQL
Databricks Runtime 17.1 and aboveErzwingt die Standardsortierung der materialisierten Ansicht auf
UTF8_BINARY. Diese Klausel ist obligatorisch, wenn das Schema, in dem die Ansicht erstellt wird, eine andere Standardkollation alsUTF8_BINARYaufweist. Die Standardsortierung der materialisierten Ansicht wird als Standardsortierung im Körper der Ansicht verwendet.-
Legt optional eine oder mehrere benutzerdefinierte Eigenschaften fest.
Verwenden Sie diese Einstellung, um den Laufzeitkanal lakeflow Spark Declarative Pipelines anzugeben, der zum Ausführen dieser Anweisung verwendet wird. Legen Sie den Wert der
pipelines.channel-Eigenschaft auf"PREVIEW"oder"CURRENT"fest. Standardwert:"CURRENT". Weitere Informationen zu Lakeflow Spark Declarative Pipelines-Kanälen finden Sie unter Lakeflow Spark Declarative Pipelines-Laufzeitkanäle. Zeitplan
Der Zeitplan kann entweder eine
SCHEDULEAnweisung oder eineTRIGGERAnweisung sein.ZEITPLAN [ REFRESH ] Planungsklausel
EVERY number { HOUR | HOURS | DAY | DAYS | WEEK | WEEKS }Verwenden Sie die
EVERY-Syntax, um eine Aktualisierung zu planen, die in regelmäßigen Abständen auftritt. Wenn dieEVERY-Syntax angegeben ist, wird die Streamingtabelle oder materialisierte Sicht basierend auf dem angegebenen Wert (z. B.HOUR,HOURS,DAY,DAYS,WEEKoderWEEKS) regelmäßig im angegebenen Intervall aktualisiert. In der folgenden Tabelle finden Sie zulässige ganzzahlige Werte fürnumber.Zeiteinheit Ganzzahliger Wert HOUR or HOURS1 <= H <= 72 DAY or DAYS1 <= D <= 31 WEEK or WEEKS1 <= W <= 8 Hinweis
Die Singular- und Pluralformen der enthaltenen Zeiteinheit sind semantisch gleichwertig.
CRON cron_string [ AT TIME ZONE timezone_id ]Zum Planen einer Aktualisierung mithilfe eines quartz cron-Werts. Gültige time_zone_values-Werte werden akzeptiert.
AT TIME ZONE LOCALwird nicht unterstützt.Fehlt
AT TIME ZONE, wird die Sitzungszeitzone verwendet. WennAT TIME ZONEfehlt und die Sitzungszeitzone nicht festgelegt ist, wird ein Fehler ausgelöst.SCHEDULEist semantisch äquivalent mitSCHEDULE REFRESH.
AUSLÖSEN AUF UPDATE [ HÖCHSTENS JEDES trigger_interval ]
Wichtig
Das
TRIGGER ON UPDATEFeature befindet sich in der Betaversion.Legen Sie optional fest, dass die Tabelle aktualisiert wird, wenn eine upstream-Datenquelle mindestens einmal pro Minute aktualisiert wird. Legen Sie einen Wert fest, für
AT MOST EVERYden mindestens eine Mindestzeit zwischen Aktualisierungen erforderlich ist.Die upstream-Datenquellen müssen externe oder verwaltete Delta-Tabellen (einschließlich materialisierter Ansichten oder Streamingtabellen) oder verwaltete Ansichten sein, deren Abhängigkeiten auf unterstützte Tabellentypen beschränkt sind.
Durch das Aktivieren von Dateiereignissen können Trigger leistungsleistungsfähiger werden und einige der Grenzwerte für Triggerupdates erhöht werden.
Dies
trigger_intervalist eine INTERVAL-Anweisung , die mindestens 1 Minute beträgt.TRIGGER ON UPDATEhat die folgenden Einschränkungen:- Nicht mehr als 10 upstream-Datenquellen pro materialisierte Ansicht bei Verwendung von TRIGGER ON UPDATE.
- Maximal 1000 Streamingtabellen oder materialisierte Ansichten können mit TRIGGER ON UPDATEangegeben werden.
- Die
AT MOST EVERYKlausel ist standardmäßig auf 1 Minute festgelegt und darf nicht kleiner als 1 Minute sein.
WITH ROW FILTER-Klausel
Fügt der Tabelle eine Zeilenfilterfunktion hinzu. Alle nachfolgenden Abfragen über diese Tabelle erhalten eine Teilmenge der Zeilen, für die die Funktion als boolescher TRUE-Wert ausgewertet wird. Dies kann für eine präzise Zugriffssteuerung nützlich sein, bei der die Funktion die Identität oder Gruppenmitgliedschaft der aufrufenden Benutzenden überprüfen kann, um zu bestimmen, ob bestimmte Zeilen gefiltert werden sollen.
-
-
Eine Abfrage, die die Sicht aus Basistabellen oder anderen Sichten erstellt.
Erforderliche Berechtigungen
Die Benutzenden, die eine materialisierte Sicht (Materialized View, MV) erstellen, sind die MV-Besitzenden und benötigen die folgenden Berechtigungen:
-
SELECT-Berechtigung für die Basistabellen, auf die von der materialisierten Sicht verwiesen wird. - Berechtigung
USE CATALOGfür den übergeordneten Katalog und BerechtigungUSE SCHEMAfür das übergeordnete Schema. -
CREATE MATERIALIZED VIEW-Berechtigung für das Schema für die materialisierte Sicht.
Damit Benutzende die materialisierte Sicht aktualisieren können, ist Folgendes erforderlich:
- Berechtigung
USE CATALOGfür den übergeordneten Katalog und BerechtigungUSE SCHEMAfür das übergeordnete Schema. - Besitz der materialisierten Sicht oder
REFRESH-Berechtigung für die materialisierte Sicht. - Die Besitzenden benötigen die
SELECT-Berechtigung für die Basistabellen, auf die die materialisierte Sicht verweist.
Damit Benutzende die materialisierte Sicht abfragen können, ist Folgendes erforderlich:
- Berechtigung
USE CATALOGfür den übergeordneten Katalog und BerechtigungUSE SCHEMAfür das übergeordnete Schema. -
SELECT-Berechtigung für die materialisierte Sicht.
Zeilenfilter und Spaltenmasken
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 maskieren, wann immer ein Tabellenscan Zeilen abruft. Alle zukünftigen Abfragen, die diese Spalte einbeziehen, erhalten das Ergebnis der Auswertung der Funktion über die Spalte, wobei der ursprüngliche Wert der Spalte ersetzt wird.
Weitere Informationen zur Verwendung von Zeilenfiltern und Spaltenformaten finden Sie unter Zeilenfilter und Spaltenformate.
Verwalten von Zeilenfiltern und Spaltenmasken
Zeilenfilter und Spaltenmasken für materialisierte Sichten sollten mithilfe der CREATE-Anweisung hinzugefügt werden.
Verhalten
-
Als Definer aktualisieren: Wenn die
REFRESH MATERIALIZED VIEWAnweisung eine materialisierte Ansicht aktualisiert, werden Zeilenfilterfunktionen mit den Rechten des Definers (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 Rechten des Definers ausgeführt werden, sind Funktionen, die den Benutzerkontext (z
CURRENT_USER. B. undIS_MEMBER) überprüfen, Ausnahmen. Diese Funktionen werden als Aufrufer ausgeführt. Dieser Ansatz erzwingt benutzerspezifische Datensicherheit und Zugriffssteuerungen basierend auf dem Kontext des aktuellen Benutzers. - 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 Benutzende Datenzugriffs- und Schutzmaßnahmen für materialisierte Sichten überwachen und überprüfen.
Einschränkungen
- Wenn aus einer materialisierten Ansicht mit einem
sum-Aggregat über eine NULL-fähige Spalte der letzte Wert ungleich NULL aus dieser Spalte entfernt wird, sodass nur nochNULL-Werte verbleiben, gibt der resultierende Aggregatwert der materialisierten Ansicht null anstelle vonNULLzurü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 NULLmuss zusammen mitPRIMARY KEYmanuell 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
OPTIMIZEundVACUUM. 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 whenever the
-- upstream data is updated
> CREATE MATERIALIZED VIEW IF NOT EXISTS subscribed_movies
TRIGGER ON UPDATE
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 every day.
-- Note: All columns in a GROUP BY need to be explicitly aliased
> CREATE MATERIALIZED VIEW daily_sales
COMMENT 'Daily sales numbers'
SCHEDULE EVERY 1 DAY
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;