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.
Dieser Artikel bietet die Spark SQL-Syntax zum Erstellen, Auflisten, Umbenennen und Löschen materialisierter Lake-Ansichten in Fabric.
Tipp
Informationen zum Erstellen Ihrer ersten materialisierten Seeansicht finden Sie unter "Erste Schritte mit materialisierten Seeblicken".
Erstellen einer materialisierten Seeansicht
Sie können einen materialisierten Seeblick von jedem Tisch oder aus einem anderen materialisierten Seeblick innerhalb eines Seehauses definieren.
Syntax
CREATE [OR REPLACE] MATERIALIZED LAKE VIEW [IF NOT EXISTS] [workspace.lakehouse.schema].MLV_Identifier
[(
CONSTRAINT constraint_name1 CHECK (condition expression1) [ON MISMATCH DROP | FAIL],
CONSTRAINT constraint_name2 CHECK (condition expression2) [ON MISMATCH DROP | FAIL]
)]
[(
REFRESH_HINT <hint_name> UNIQUE (<column1> [, <column2>, ...])
)]
[PARTITIONED BY (col1, col2, ... )]
[COMMENT "description or comment"]
[TBLPROPERTIES ("key1"="val1", "key2"="val2", ... )]
AS select_statement
Hinweis
-
REFRESH_HINTist in der Vorschau. Für weitere Details zur Verwendung von Aktualisierungshinweisen siehe Optimale Aktualisierung für Löschungen und Aktualisierungen in materialisierten Lake-Ansichten aktivieren (Vorschau). - Wenn der Arbeitsbereichsname Leerzeichen enthält, schließen Sie ihn in Backticks ein:
`My Workspace`.lakehouse.schema.view_name - Materialisierte Seeansichtsnamen sind ohne Berücksichtigung der Groß- und Kleinschreibung und werden in Kleinbuchstaben konvertiert (z. B.
MyTestViewwird zumytestview).
Arguments
| Parameter | BESCHREIBUNG |
|---|---|
OR REPLACE |
Überschreibt alle vorhandenen materialisierten Seeansichten mit demselben Namen. Kann nicht mit IF NOT EXISTS kombiniert werden. |
IF NOT EXISTS |
Erstellt die materialisierte Seeansicht nur, wenn sie noch nicht vorhanden ist. Die Ausführung wird fehlerfrei ausgeführt, wenn die Ansicht bereits definiert ist. Kann nicht mit OR REPLACE kombiniert werden. |
MLV_Identifier |
Name des materialisierten Seeblicks. Kann vollständig qualifiziert werden als workspace.lakehouse.schema.name. |
CONSTRAINT ... CHECK |
Definiert eine Datenqualitätsregel. Die CHECK Klausel gibt einen booleschen Ausdruck an, den jede Zeile erfüllen muss. Sie können mehrere Einschränkungen definieren. |
ON MISMATCH |
Aktion, die ausgeführt werden soll, wenn eine Zeile gegen eine Einschränkung verstößt.
DROP entfernt die Zeile stillschweigend; FAIL beendet die Aktualisierung mit einem Fehler. Der Standardwert ist FAIL. |
REFRESH_HINT |
Deklariert eine oder mehrere Spalten, die Zeilen eindeutig identifizieren, für die inkrementelle Verarbeitung von Aktualisierungen und Löschungen (Vorschau). |
PARTITIONED BY |
Spalten, um die materialisierte Seeansicht zu partitionieren, durch die die Abfrageleistung für gefilterte Lesevorgänge verbessert werden kann. |
COMMENT |
Freitextbeschreibung, die mit der materialisierten Seeansichtsdefinition gespeichert ist. |
TBLPROPERTIES |
Schlüsselwertpaare, die als Metadaten in der materialisierten Seeansicht gespeichert sind. |
AS select_statement |
Die SELECT Abfrage, die die Daten in der materialisierten Seeansicht definiert. |
Examples
Im folgenden Beispiel wird eine materialisierte Seeansicht mit einer Datenqualitätseinschränkung, einem Kommentar und einer Partitionierung erstellt. Die OR REPLACE Klausel überschreibt alle vorhandenen Ansichten mit demselben Namen.
CREATE OR REPLACE MATERIALIZED LAKE VIEW silver.cleaned_order_data
(
CONSTRAINT valid_quantity CHECK (quantity > 0) ON MISMATCH DROP
)
PARTITIONED BY (category)
COMMENT "Cleaned order data joined from products and orders"
AS SELECT
p.productID,
p.productName,
p.category,
o.orderDate,
o.quantity,
o.totalAmount
FROM bronze.products p INNER JOIN bronze.orders o
ON p.productID = o.productID
Im folgenden Beispiel wird eine einfachere materialisierte Seeansicht erstellt. Die IF NOT EXISTS Klausel verhindert einen Fehler, wenn die Ansicht bereits vorhanden ist, wodurch sie für Bereitstellungsskripts sicher ist.
CREATE MATERIALIZED LAKE VIEW IF NOT EXISTS silver.products_with_sales AS
SELECT
p.productID,
p.productName,
p.category,
CASE
WHEN COUNT(o.orderID) OVER (PARTITION BY p.productID) > 0 THEN TRUE
ELSE FALSE
END AS has_sales
FROM bronze.products p LEFT JOIN bronze.orders o
ON p.productID = o.productID
Tipp
Verwalten sie materialisierte Seeansicht von Ihrem Seehaus aus
Nachdem Sie Ihre materialisierten Lake-Ansichten erstellt haben, orchestrieren Sie deren Aktualisierung nicht von einem Notebook aus. Verwenden Sie stattdessen die beiden integrierten Funktionen im Seehaus:
- Linien: Fabric leitet die Abhängigkeitsreihenfolge zwischen den materialisierten Seeansichten anhand ihrer Definitionen ab. Um die Linienansicht zu öffnen, wählen Sie im Menüband die Registerkarte " Materialisierte Seeansichten " und dann " Verwalten" aus. Dort können Sie einen laufenden Durchlauf verfolgen und die vorgelagerten und nachgelagerten Abhängigkeiten für jede Ansicht prüfen.
- Geplante Aktualisierung: Erstellen Sie in derselben Ansicht "Verwalten " einen oder mehrere Zeitpläne, um alle materialisierten Seeansichten oder eine ausgewählte Teilmenge zu aktualisieren. Jeder Zeitplan wird unabhängig ausgeführt und aktualisiert Ansichten in der Reihenfolge ihrer Abhängigkeiten, sodass nachgelagerte Ansichten immer aktuelle Daten aus ihren vorgelagerten Ansichten lesen. Fabric werden vorübergehende Fehler für Sie erneut angezeigt.
Verwenden Sie Notizbücher, um die Definitionen Ihrer materialisierten Lake Views zu erstellen und iterativ zu verfeinern. Überlassen Sie Datenherkunft und geplanter Aktualisierung die Sortierung, Ausführung und Wiederholungsversuche – für zuverlässige, konsistente Daten mit weniger zu wartendem Code.
Dateien eintragen mit USING OneLake_Files
Neben dem Definieren einer materialisierten Lake-Ansicht aus Tabellen können Sie auch eine definieren, die CSV- oder Parquet-Dateien direkt aus OneLake aufnimmt. Eine Datei-Eingabeansicht verwendet USING OneLake_Files einen physischen OneLake-Ordner, eine OneLake-Ordner-Verknüpfung oder einen Einzeldateipfad. Du kannst optional eine FROM-less-Klausel AS SELECT verwenden, um die Quelle zu filtern, zu formen und zu aggregieren, während sie aufgenommen wird.
Die folgende Tabelle zeigt, welche Syntax für jeden Autorenstil gilt:
| Aspect | Tabellenbasierte materialisierte Seeansicht | Dateibasierte materialisierte Seeansicht |
|---|---|---|
| Source | Tabellen oder andere materialisierte Seeansichten | Ein physischer OneLake-Ordner, eine OneLake-Ordner-Verknüpfung oder eine einzelne Datei |
| Definition | AS select_statement |
USING OneLake_Files
+
OPTIONS + optional ohne FROM AS SELECT |
| Formate | Jede abfragbare Tabelle | CSV, Parquet |
| Schema | Abgeleitet aus dem SELECT |
schema_mode
=
DYNAMIC oder FIXED |
| Quellenlinie | Upstream-Tabellen/Ansichten | Quellstandort; projizieren Sie optional die __filepath__ Quell-Metadaten-Spalte, wenn Sie eine Nachverfolgbarkeit pro Zeile benötigen |
| Typische Schicht | Silber, Gold | Bronze |
| Datenqualitätsbeschränkungen | Supported | Wird bei der Erfassung unterstützt |
Syntax
CREATE [OR REPLACE] MATERIALIZED LAKE VIEW [IF NOT EXISTS] [workspace.lakehouse.schema].MLV_Identifier
[(
CONSTRAINT constraint_name CHECK (condition) ON MISMATCH DROP | FAIL
)]
USING OneLake_Files
OPTIONS (
'format' = 'csv' | 'parquet',
'path' = 'abfss://<workspace>@<host>/<lakehouse>/Files/<folder-or-file>',
['header' = 'true' | 'false',]
['delimiter' = '<char>',]
[...]
)
[PARTITIONED BY (column_name [, ...])]
[COMMENT "description"]
[TBLPROPERTIES (
'schema_mode' = 'DYNAMIC' | 'FIXED',
'refresh_mode' = 'APPEND_ONLY' | 'FULL' | 'MIRROR'
)]
[AS SELECT select_expression [...] [WHERE condition]
[GROUP BY expression [, ...]] [HAVING condition]]
Hinweis
Gib in der Dateiaufnahme AS SELECT keine FROM Klausel an. Die Quelle ist bereits durch USING OneLake_Files und die path Option gebunden.
OPTIONS-Referenz
| Auswahl | Gilt für: | BESCHREIBUNG |
|---|---|---|
format |
CSV, Parquet | Quelldateiformat. Unterstützte Werte sind csv und parquet. |
path |
CSV, Parquet | Physischer OneLake-Ordner, OneLake-Ordner-Verknüpfung oder Einzeldatei-ABFSS-Pfad. Dateien, die in verschachtelten Unterordnern verfügbar sind, werden rekursiv aufgenommen, wenn die Ansicht erstellt wird. Verwenden Sie für einen Ordner einen nachlaufenden Schrägstrich oder fügen Sie die Dateiendung für eine einzelne Datei hinzu. |
header |
CSV-Datei | Gibt an, ob die erste Zeile jeder Datei Spaltennamen enthält. Wird standardmäßig auf false festgelegt. |
delimiter |
CSV-Datei | Feldtrennzeichen (zum Beispiel , oder |). Standardmäßig wird ein Komma verwendet. |
sep |
CSV-Datei | Alias für delimiter. |
quote |
CSV-Datei | Zeichen, das zum Einschließen von Werten in Anführungszeichen verwendet wird. |
escape |
CSV-Datei | Zeichen, das verwendet wird, um ein Anführungszeichen innerhalb eines bereits in Anführungszeichen gesetzten Werts zu maskieren. |
nullValue |
CSV-Datei | Zeichenfolge, die einen Nullwert darstellt. |
ignoreLeadingWhiteSpace |
CSV-Datei | Ob führende Leerzeichen aus Werten entfernt werden sollen. |
ignoreTrailingWhiteSpace |
CSV-Datei | Ob man nachlaufende Räume aus Werten entfernen soll. |
multiLine |
CSV-Datei | Ob ein angegebener Wert mehrere Zeilen umfassen kann. Wird standardmäßig auf false festgelegt. |
dateFormat |
CSV-Datei | Java-Datumsformat, das zum Parsen von Datumswerten wie z. B. MM/dd/yyyy verwendet wird. |
timestampFormat |
CSV-Datei | Java-Zeitstempelmuster wird verwendet, um Zeitstempelwerte zu analysieren. |
encoding |
CSV-Datei | Zeichenkodierung, wie UTF-8, , , UTF-16, oder Windows-1252ISO-8859-1. |
comment |
CSV-Datei | Ein Zeichen, das eine Zeile als Kommentar markiert, den man überspringen kann. |
inferSchema |
CSV-Datei | Ob Spaltentypen abgeleitet werden sollen. Wenn false, werden Spalten als Strings gelesen. Verwenden Sie den FIXEDSchemamodus, wenn Sie die Inferenz deaktivieren. |
columnNameOfCorruptRecord |
CSV-Datei | Name einer Zeichenkettenspalte, die den Rohtext für fehlgeformte Zeilen erhält. Gültige Zeilen enthalten NULL in dieser Spalte. Fügen Sie die Spalte in die AS SELECT Ausgabe ein. |
Wichtig
Fabric beherrscht die Handhabung von fehlgeformten Reihen. Setze die Spark CSV-Option mode nicht.
TBLPROPERTIES-Referenz
| Property | Werte | BESCHREIBUNG |
|---|---|---|
schema_mode |
DYNAMIC (Standard), FIXED |
DYNAMIC fügt neu entdeckte Spalten hinzu und schreibt, NULL wenn eine Datei keine festgelegte Spalte enthält.
FIXED fixiert das Schema bei der Erstellung und weist spätere Abweichungen zurück. |
refresh_mode |
APPEND_ONLY, FULL, MIRROR |
Für Ordner fügt APPEND_ONLY Zeilen aus neuen Dateien hinzu, FULL verarbeitet den aktuellen Ordner erneut als Snapshot, und MIRROR berücksichtigt Dateihinzufügungen und -löschungen. Eine Einzeldatei-Quelle verwendet FULL Refresh-Semantik. |
Example
Das folgende Beispiel überträgt einen Ordner mit CSV-Dateien mit einer Header-Zeile in eine bronzefarbene Ansicht. Jede Zeile erhält außerdem eine Spalte __filepath__ , die die Quelldatei aufzeichnet, aus der sie gelesen wurde.
CREATE MATERIALIZED LAKE VIEW bronze.raw_orders
USING OneLake_Files
OPTIONS (
'format' = 'csv',
'path' = 'abfss://SalesWorkspace@onelake.dfs.fabric.microsoft.com/SalesLake.Lakehouse/Files/orders/',
'header' = 'true'
)
TBLPROPERTIES (
'schema_mode' = 'DYNAMIC',
'refresh_mode' = 'APPEND_ONLY'
);
Sie können dann nachgelagerte materialisierte Lakeviews der Silver- und Gold-Ebene erstellen, die Daten aus bronze.raw_orders auswählen; Fabric erfasst die Abhängigkeiten und aktualisiert sie in der richtigen Reihenfolge. Um Dateien in der Pipeline nachzuverfolgen, finden Sie weitere Informationen unter Verwalten der Herkunft von materialisierten Lake-Ansichten in Fabric.
Dateien während der Eingabe filtern, transformieren und validieren
Verwenden Sie ein FROM-loses AS SELECT , um Spalten auszuwählen, Zeilen zu filtern, Werte zu casten, berechnete Spalten hinzuzufügen, Daten zu aggregieren oder Fensterfunktionen anzuwenden. Beschränkungen für die Dateiaufnahme werden auf das projizierte Ergebnis angewendet, sodass eine Beschränkung auf einen berechneten Alias verweisen kann.
Das folgende Beispiel erfasst fehlgeformte Zeilen, wendet eine Datenqualitätsregel auf Zeilenebene an, filtert die Eingabe und teilt die materialisierte Ausgabe auf:
CREATE MATERIALIZED LAKE VIEW silver.valid_orders
(
CONSTRAINT positive_amount
CHECK (order_amount > 0) ON MISMATCH DROP
)
USING OneLake_Files
OPTIONS (
'format' = 'csv',
'path' = 'abfss://SalesWorkspace@onelake.dfs.fabric.microsoft.com/SalesLake.Lakehouse/Files/orders/',
'header' = 'true',
'multiLine' = 'true',
'dateFormat' = 'MM/dd/yyyy',
'timestampFormat' = 'MM/dd/yyyy HH:mm:ss',
'encoding' = 'ISO-8859-1',
'comment' = '#',
'columnNameOfCorruptRecord' = '_corrupt_record'
)
PARTITIONED BY (region)
COMMENT "Valid orders ingested from CSV"
TBLPROPERTIES (
'schema_mode' = 'DYNAMIC',
'refresh_mode' = 'FULL'
)
AS SELECT
order_id,
region,
CAST(amount AS DECIMAL(18,2)) AS order_amount,
CASE WHEN amount >= 1000 THEN 'high' ELSE 'standard' END AS order_band,
_corrupt_record,
__filepath__,
current_timestamp() AS ingested_at;
Erfasste Zeilen zur Überprüfung oder Behebung abfragen:
SELECT
_corrupt_record,
__filepath__,
ingested_at
FROM silver.valid_orders
WHERE _corrupt_record IS NOT NULL;
Sie können auch aggregierte oder fensterbasierte materialisierte Ergebnisse direkt aus Dateien erstellen:
CREATE MATERIALIZED LAKE VIEW gold.sales_by_region
USING OneLake_Files
OPTIONS (
'format' = 'parquet',
'path' = 'abfss://SalesWorkspace@onelake.dfs.fabric.microsoft.com/SalesLake.Lakehouse/Files/sales/'
)
TBLPROPERTIES ('schema_mode' = 'DYNAMIC', 'refresh_mode' = 'FULL')
AS SELECT
region,
COUNT(*) AS order_count,
SUM(amount) AS total_amount,
AVG(amount) AS average_amount
GROUP BY region
HAVING SUM(amount) > 0;
Unterstützte Ausdrücke umfassen Standard-Spark-SQL-Arithmetik-, Aggregate-, Statistik-, Fenster- und Rangfolgefunktionen.
Eingabe einer einzelnen Datei
Legen Sie path als CSV- oder Parquet-Datei anstelle eines Ordners fest. Eine Einzeldatei-Quelle verwendet FULL Refresh-Semantik, sodass das Ersetzen der Datei das materialisierte Ergebnis ersetzt.
CREATE MATERIALIZED LAKE VIEW bronze.monthly_snapshot
USING OneLake_Files
OPTIONS (
'format' = 'parquet',
'path' = 'abfss://SalesWorkspace@onelake.dfs.fabric.microsoft.com/SalesLake.Lakehouse/Files/snapshots/2026-08.parquet'
)
TBLPROPERTIES (
'schema_mode' = 'FIXED',
'refresh_mode' = 'FULL'
);
Hinweis
Wenn du Schema verwendest FIXED und der Quellordner zum Zeitpunkt des ursprünglichen CREATESchemas mehrere Dateien mit unterschiedlichen Schemata enthält, fehlschlägt die Ansicht, weil sie kein einziges festes Schema abgleichen kann. Zeigt FIXED Ansichten auf Dateien, die ein gemeinsames Schema teilen, oder verwendet DYNAMIC. Dies ist eine bekannte Beschränkung, ähnlich dem Verhalten fester Schemata bei Shortcut-Transformationen.
Wichtig
Quellpfade, die ein Leerzeichen oder %20 enthalten, werden derzeit nicht akzeptiert. Du kannst eine OneLake-Ordnerverknüpfung als Quelle verwenden: Bei der Erstellung werden Dateien übernommen, die im Stammverzeichnis der Verknüpfung und in verschachtelten Ordnern verfügbar sind. Managed Refresh entdeckt neue Dateien, die am Shortcut-Root hinzugefügt wurden, entdeckt aber nicht rekursiv neue Dateien, die unter verschachtelten Shortcut-Ordnern hinzugefügt wurden.
Tipp
Um das gesamte Quellverzeichnis bei Bedarf erneut zu verarbeiten, führen Sie REFRESH MATERIALIZED LAKE VIEW <name> FULL; aus. Wie bei tabellenbasierten Ansichten sollten Sie keine kontinuierliche Aktualisierung von einem Notebook aus orchestrieren – nutzen Sie Lineage und Geplante Aktualisierung, um neue Dateien automatisch zu übernehmen.
Abrufen einer Liste der materialisierten Seeansichten
Verwenden Sie die folgende Syntax, um die Liste aller materialisierten Seeansichten in einem Schema abzurufen:
SHOW MATERIALIZED LAKE VIEWS <IN/FROM> Schema_Name;
So können Sie beispielsweise alle materialisierten Seeansichten im silver Schema auflisten:
SHOW MATERIALIZED LAKE VIEWS IN silver;
Abrufen der Anweisung, die eine materialisierte Seeansicht erstellt hat
Verwenden Sie die folgende Syntax, um die CREATE Anweisung für eine materialisierte Seeansicht abzurufen:
SHOW CREATE MATERIALIZED LAKE VIEW MLV_Identifier;
So rufen Sie z. B. die Definition von products_with_sales:
SHOW CREATE MATERIALIZED LAKE VIEW products_with_sales;
Aktualisieren einer materialisierten Seeansicht
Verwenden Sie den Befehl SELECT, um die Definition einer materialisierten Seeansicht (z. B. Abfrage, Einschränkungen oder Partitionierung) zu ändern. Alternativ können Sie die vorhandene Ansicht löschen und neu erstellen.
Umbenennen eines materialisierten Seeblicks
Verwenden Sie den ALTER MATERIALIZED LAKE VIEW Befehl, um eine vorhandene materialisierte Seeansicht umzubenennen. Die Syntax lautet:
ALTER MATERIALIZED LAKE VIEW MLV_Identifier RENAME TO MLV_Identifier_New;
Um z. B. Folgendes umzubenennen products_with_sales:
ALTER MATERIALIZED LAKE VIEW products_with_sales RENAME TO products_with_sales_v2;
Hinweis
Der ALTER MATERIALIZED LAKE VIEW Befehl wird nur für die Umbenennung unterstützt. Informationen zum Ändern der Definition oder anderer Eigenschaften (z. B. Abfrage SELECT , Einschränkungen oder Partitionierung) finden Sie unter Aktualisieren einer materialisierten Seeansicht.
Löschen einer materialisierten Seeansicht
Sie können eine materialisierte Seeansicht löschen, indem Sie die Option "Löschen " im Seehaus-Objekt-Explorer oder durch Ausführen eines DROP Befehls verwenden. Die Syntax lautet:
DROP MATERIALIZED LAKE VIEW MLV_Identifier;
Um products_with_sales zu löschen, gehen Sie zum Beispiel so vor:
DROP MATERIALIZED LAKE VIEW products_with_sales;
Hinweis
Das Ablegen oder Umbenennen einer materialisierten Seeansicht wirkt sich auf die Linienansicht und die geplante Aktualisierung aus. Achten Sie darauf, den Verweis in allen abhängigen materialisierten Seeansichten zu aktualisieren.
Aktuelle Einschränkungen
Die folgenden Einschränkungen gelten für die Spark SQL-Anweisungen für materialisierte Seeansichten:
-
Schemanamen – Schemanamen in Großbuchstaben (z. B
MYSCHEMA. ) werden nicht unterstützt. Verwenden Sie gemischte Groß- oder Kleinschreibung. -
Keine Anweisungen der Datenmanipulationssprache (Data Manipulation Language, DML) – Sie können keine
INSERT,UPDATEoderDELETEAnweisungen gegen eine materialisierte Seeansicht ausführen. Daten werden nur durch dieSELECTAbfrage in der Definition aufgefüllt. -
Keine Zeitreiseabfragen – In der Abfrage innerhalb einer materialisierten Lake-View-Definition kann keine Delta-Lake-Zeitreisesyntax (z.B.
SELECToder ) verwendet werden. -
Keine benutzerdefinierten Funktionen – Benutzerdefinierte Funktionen (USER-Defined Functions, UDFs) werden in der
SELECTAbfrage, die eine materialisierte Seeansicht definiert, nicht unterstützt. -
Keine temporären Ansichten als Quellen – Die
SELECTAbfrage kann auf Tabellen und andere materialisierte Seeansichten verweisen, aber keine temporären Ansichten. -
Spark-Eigenschaften auf Sitzungsebene – Spark-Konfigurationseigenschaften , die auf Sitzungsebene (z. B. ) festgelegt sind,
spark.conf.set(...)werden während einer geplanten Aktualisierung nicht angewendet. Legen Sie stattdessen Eigenschaften auf Seehaus- oder Arbeitsbereichsebene fest. -
Dateieingabe — Datei-Eingabeansichten unterstützen nur CSV und Parquet. Eine
FIXED-Schema-Ansicht schlägt fehl, wenn der Quellordner Dateien mit unterschiedlichen Schemata zum Zeitpunkt der Erstellung enthält. Quellpfade können keine Leerzeichen enthalten. OneLake-Ordnerverknüpfungen werden als Quellen unterstützt, aber die verwaltete Aktualisierung erkennt Dateien, die in verschachtelten Verknüpfungsordnern hinzugefügt werden, nicht rekursiv.