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.
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. materialisierte Ansichten werden von einer Pipeline unterstützt. Jedes Mal, wenn eine materialisierte Ansicht aktualisiert wird, werden Abfrageergebnisse neu berechnet, um Änderungen in upstream-Datasets widerzuspiegeln. Sie können materialisierte Ansichten manuell oder nach einem Zeitplan aktualisieren.
Weitere Informationen zum Ausführen oder Planen von Updates finden Sie unter Ausführen eines Pipelineupdates.
Syntax
CREATE [OR REFRESH] [PRIVATE] MATERIALIZED VIEW
view_name
[ column_list ]
[ view_clauses ]
AS query
column_list
( { column_name column_type column_properties } [, ...]
[ column_constraint ] [, ...]
[ , table_constraint ] [...] )
column_properties
{ NOT NULL | COMMENT column_comment | column_constraint | MASK clause } [ ... ]
view_clauses
{ USING DELTA |
PARTITIONED BY (col [, ...]) |
CLUSTER BY clause |
LOCATION path |
COMMENT view_comment |
TBLPROPERTIES clause |
WITH { ROW FILTER clause } } [...]
Die Parameter
REFRESH
Wenn angegeben, wird die Ansicht erstellt oder eine vorhandene Ansicht und deren Inhalt aktualisiert.
PRIVATE
Erstellt eine private materialisierte Sicht. Eine private materialisierte Ansicht kann als Zwischentabelle in einer Pipeline hilfreich sein, die sie nicht im Katalog veröffentlichen möchten.
- Sie werden nicht zum Katalog hinzugefügt und sind nur innerhalb der definierenden Pipeline zugänglich.
- Sie können denselben Namen wie ein vorhandenes Objekt im Katalog haben. Wenn in der Pipeline eine private materialisierte Sicht und ein Objekt im Katalog denselben Namen haben, werden Verweise auf den Namen in die private materialisierte Sicht aufgelöst.
- Private materialisierte Sichten werden während der gesamten Lebensdauer der Pipeline beibehalten, nicht nur während eines einzelnen Updates.
Private materialisierte Ansichten wurden zuvor mit dem
TEMPORARYParameter erstellt.view_name
Der Name der neu erstellten Sicht. Der vollqualifizierte Anzeigename muss eindeutig sein.
Private materialisierte Ansichten können denselben Namen wie ein Objekt haben, das im Katalog veröffentlicht wird.
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.-
Fügt eine Einschränkung hinzu, die Daten überprüft, während sie in die Tabelle fließt. Weitere Informationen finden Sie unter Verwalten der Datenqualität mit Pipelineerwartungen.
-
Von Bedeutung
Dieses Feature befindet sich in der Public Preview.
Fügt eine Spaltenmaskierungsfunktion hinzu, um sensible Daten zu anonymisieren. Siehe Zeilenfilter und Spaltenmasken.
-
Tabellenbeschränkung
Von Bedeutung
Dieses Feature befindet sich in der Public Preview.
Beim Angeben eines Schemas können Sie Primär- und Fremdschlüssel definieren. Die Constraints dienen der Information und werden nicht erzwungen. Siehe die CONSTRAINTKlausel in der SQL-Sprachreferenz.
Hinweis
Um Tabelleneinschränkungen zu definieren, muss ihre Pipeline eine Unity-Katalog-fähige Pipeline sein.
view_clauses
Geben Sie optional Partitionierung, Kommentare und benutzerdefinierte Eigenschaften für die materialisierte Ansicht an. Jede Unterklausel kann nur einmal angegeben werden.
VERWENDEN VON DELTA
Gibt das Datenformat an. Die einzige Option ist DELTA.
Diese Klausel ist optional und standardmäßig DELTA.
PARTITIONIERT VON
Eine optionale Liste mit einer oder mehreren Spalten, die für die Partitionierung in der Tabelle verwendet werden sollen. Gegenseitiger Ausschluss mit
CLUSTER BYFlüssigkeitsclustering bietet eine flexible, optimierte Lösung für Clustering. Erwägen Sie die Verwendung von
CLUSTER BYanstelle vonPARTITIONED BYfür Pipelines.CLUSTER BY
Aktivieren des Liquid Clustering für die Tabelle und Definieren der Spalten, die als Clusterschlüssel verwendet werden sollen. Verwenden Sie automatische Flüssigclustering mit
CLUSTER BY AUTO, und Databricks wählt intelligent Clustering-Schlüssel aus, um die Abfrageleistung zu optimieren. Gegenseitiger Ausschluss mitPARTITIONED BYORT
Ein optionaler Speicherort für Tabellendaten. Wenn diese Einstellung nicht festgelegt ist, verwendet das System standardmäßig den Speicherort der Pipeline.
Diese Option ist nur verfügbar, wenn sie im Hive-Metaspeicher veröffentlicht wird. Im Unity-Katalog wird der Speicherort automatisch verwaltet.
KOMMENTAR
Optionale Beschreibung für die Tabelle.
TBLPROPERTIES
Eine optionale Liste der Tabelleneigenschaften für die Tabelle.
MIT ROW FILTER
Von Bedeutung
Dieses Feature befindet sich in der Public Preview.
Fügt der Tabelle eine Zeilenfilterfunktion hinzu. Zukünftige Abfragen für diese Tabelle erhalten eine Teilmenge der Zeilen, für die die Funktion als TRUE ausgewertet wird. Dies ist für eine differenzierte Zugriffssteuerung nützlich, da die Funktion dadurch die Identität oder Gruppenmitgliedschaften der aufrufenden Benutzenden überprüfen kann, um zu entscheiden, ob bestimmte Zeilen gefiltert werden sollen.
Siehe
ROW FILTERKlausel.query
Eine Abfrage, die das Dataset für die Tabelle definiert.
Erforderliche Berechtigungen
Das für die Ausführung einer Pipeline verwendete Benutzendenkonto muss über die folgenden Berechtigungen verfügen:
-
SELECT-Berechtigung für die Basistabellen, auf die die materialisierte Sicht verweist. - 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 ein Benutzer die Pipeline aktualisieren kann, in der die materialisierte Ansicht definiert ist, 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. - Der Besitzer der materialisierten Ansicht muss über die
SELECTBerechtigungen für die Basistabellen verfügen, auf die von der materialisierten Ansicht verwiesen wird.
Damit ein Benutzer die resultierende materialisierte Ansicht abfragen kann, ist Folgendes erforderlich:
- Berechtigung
USE CATALOGfür den übergeordneten Katalog und BerechtigungUSE SCHEMAfür das übergeordnete Schema. -
SELECT-Berechtigung für die materialisierte Sicht.
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. - Das Umbenennen der Tabelle oder das Ändern des Besitzers bzw. der Besitzerin wird nicht unterstützt.
- Generierte Spalten, Identitätsspalten und Standardspalten werden nicht unterstützt.
Examples
-- Create a materialized view by reading from an external data source, using the default schema:
CREATE OR REFRESH MATERIALIZED VIEW taxi_raw
AS SELECT * FROM read_files("/databricks-datasets/nyctaxi/sample/json/")
-- Create a materialized view by reading from a dataset defined in a pipeline:
CREATE OR REFRESH MATERIALIZED VIEW filtered_data
AS SELECT
...
FROM taxi_raw
-- Specify a schema and clustering columns for a table:
CREATE OR REFRESH MATERIALIZED VIEW sales
(customer_id STRING,
customer_name STRING,
number_of_line_items STRING,
order_datetime STRING,
order_number LONG,
order_day_of_week STRING GENERATED ALWAYS AS (dayofweek(order_datetime))
) CLUSTER BY (order_day_of_week, customer_id)
COMMENT "Raw data on sales"
AS SELECT * FROM ...
-- Specify partition columns for a table:
CREATE OR REFRESH MATERIALIZED VIEW sales
(customer_id STRING,
customer_name STRING,
number_of_line_items STRING,
order_datetime STRING,
order_number LONG,
order_day_of_week STRING GENERATED ALWAYS AS (dayofweek(order_datetime))
) PARTITIONED BY (order_day_of_week)
COMMENT "Raw data on sales"
AS SELECT * FROM ...
-- Specify a primary and foreign key constraint for a table:
CREATE OR REFRESH MATERIALIZED VIEW sales
(customer_id STRING NOT NULL PRIMARY KEY,
customer_name STRING,
number_of_line_items STRING,
order_datetime STRING,
order_number LONG,
order_day_of_week STRING GENERATED ALWAYS AS (dayofweek(order_datetime)),
CONSTRAINT fk_customer_id FOREIGN KEY (customer_id) REFERENCES main.default.customers(customer_id)
)
COMMENT "Raw data on sales"
AS SELECT * FROM ...
-- Specify a row filter and mask clause for a table:
CREATE OR REFRESH MATERIALIZED VIEW sales (
customer_id STRING MASK catalog.schema.customer_id_mask_fn,
customer_name STRING,
number_of_line_items STRING COMMENT 'Number of items in the order',
order_datetime STRING,
order_number LONG,
order_day_of_week STRING GENERATED ALWAYS AS (dayofweek(order_datetime))
)
COMMENT "Raw data on sales"
WITH ROW FILTER catalog.schema.order_number_filter_fn ON (order_number)
AS SELECT * FROM sales_bronze