Spark SQL-Referenz für materialisierte Seeansichten

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

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, UPDATE oder DELETE Anweisungen gegen eine materialisierte Seeansicht ausführen. Daten werden nur durch die SELECT Abfrage in der Definition aufgefüllt.
  • Keine Zeitreiseabfragen – In der Abfrage innerhalb einer materialisierten Lake-View-Definition kann keine Delta-Lake-Zeitreisesyntax (z.B. SELECT oder ) verwendet werden.
  • Keine benutzerdefinierten Funktionen – Benutzerdefinierte Funktionen (USER-Defined Functions, UDFs) werden in der SELECT Abfrage, die eine materialisierte Seeansicht definiert, nicht unterstützt.
  • Keine temporären Ansichten als Quellen – Die SELECT Abfrage 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.