Spark SQL-referens för materialiserade sjövyer

Denna artikel tillhandahåller Spark SQL-syntaxen för att skapa, lista, byta namn på och ta bort materialiserade sjövyer i Fabric.

Tips/Råd

Information om hur du skapar din första materialiserade sjövy finns i Kom igång med materialiserade sjövyer.

Skapa en materialiserad sjövy

Du kan definiera en materialiserad sjövy från valfri tabell eller från en annan materialiserad sjövy i ett sjöhus.

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] 
)] 
[PARTITIONED BY (col1, col2, ... )] 
[COMMENT "description or comment"] 
[TBLPROPERTIES ("key1"="val1", "key2"="val2", ... )] 
AS select_statement 

Anmärkning

  • Om namnet på arbetsytan innehåller blanksteg omger du det i backticks: `My Workspace`.lakehouse.schema.view_name
  • Materialiserade sjövynamn är skiftlägesokänsliga och konverteras till gemener (till exempel MyTestView blir mytestview).

Arguments

Parameter Beskrivning
OR REPLACE Skriver över alla befintliga materialiserade sjövyer med samma namn. Det går inte att kombinera med IF NOT EXISTS.
IF NOT EXISTS Skapar endast den materialiserade sjövyn om den inte redan finns. Uttalandet lyckas utan fel om vyn redan är definierad. Det går inte att kombinera med OR REPLACE.
MLV_Identifier Namnet på den materialiserade sjövyn. Kan vara fullständigt kvalificerad som workspace.lakehouse.schema.name.
CONSTRAINT ... CHECK Definierar en datakvalitetsregel. Satsen CHECK anger ett booleskt uttryck som varje rad måste uppfylla. Du kan definiera flera begränsningar.
ON MISMATCH Åtgärder att vidta när en rad bryter mot en begränsning. DROP tar tyst bort raden. FAIL stoppar uppdateringen med ett fel. Standard är FAIL.
PARTITIONED BY Kolumner att partitionera den materialiserade sjövyen med, vilket kan förbättra prestandan för frågor vid filtrerade läsningar.
COMMENT Beskrivning av fritext som lagras med definitionen för materialiserad sjövy.
TBLPROPERTIES Nyckel/värde-par som lagras som metadata i den materialiserade sjövyn.
AS select_statement Frågan SELECT som definierar data i den materialiserade sjövyn.

Examples

I följande exempel skapas en materialiserad sjövy med en datakvalitetsbegränsning, en kommentar och partitionering. OR REPLACE-klausal skriver över eventuell befintlig vy med samma namn.

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

I följande exempel skapas en enklare materialiserad sjövy. Satsen IF NOT EXISTS förhindrar ett fel om vyn redan finns, vilket gör den säker för distributionsskript.

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

Tips/Råd

Hantera materialiserad uppdatering av sjövy från ditt sjöhus

När du har skapat dina materialiserade sjövyer ska du inte orkestrera uppdateringen från en notebook-fil. Använd i stället de två inbyggda funktionerna på lakehouse:

  • Ursprung: Fabric härleder beroendeordningen mellan dina materialiserade sjövyer från deras definitioner. Om du vill öppna ursprungsvyn väljer du fliken Materialiserade sjövyer i menyfliksområdet och väljer sedan Hantera. Där kan du följa en pågående körning och granska uppströms- och nedströmsberoenden för varje vy.
  • Schemalagd uppdatering: Från samma hantera-vy skapar du ett eller flera scheman för att uppdatera alla materialiserade sjövyer eller en vald delmängd. Varje schema körs separat och uppdaterar vyer i beroendeordning, så underordnade vyer läser alltid nya data från sina överordnade vyer. Fabric försöker igen tillfälliga fel åt dig.

Använd notebook-filer för att skapa och iterera på dina materialiserade sjövydefinitioner. Låt ursprung och schemalagd uppdatering hantera beställning, körning och återförsök – för tillförlitliga, repeterbara data med mindre kod att underhålla.

Inmata filer med USING OneLake_Files

Förutom att definiera en materialiserad sjövy från tabeller kan du definiera en som tar in CSV- eller Parquet-filer direkt från OneLake. En filinsamlingsvy används USING OneLake_Files tillsammans med en fysisk OneLake-mapp, en OneLake-mappgenväg eller en enda filväg. Du kan valfritt använda en FROM-less-klausul AS SELECT för att filtrera, forma och aggregera källan när den tas in.

Följande tabell visar vilken syntax som gäller för varje författarstil:

Aspect Tabellbaserad materialiserad sjövy Filbaserad materialiserad sjövy
Source Tabeller eller andra materialiserade sjövyer En fysisk OneLake-mapp, OneLake-mappgenväg eller enskild fil
Definition AS select_statement USING OneLake_Files + OPTIONS + valfritt utan FROM AS SELECT
Format Vilken frågebar tabell som helst CSV, Parquet
Schema Härlett från SELECT schema_mode = DYNAMIC eller FIXED
Källlinje Uppströmstabeller/vyer Källposition; inkludera eventuellt kolumnen __filepath__ för källmetadata när du behöver filspårbarhet för varje rad
Typiskt lager Silver, guld Brons
Datakvalitetsbegränsningar Understödd Stöds vid inmatning

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]]

Anmärkning

Specificera inte någon FROM klausul i fil-ingestion AS SELECT. Källan är redan bunden av USING OneLake_Files och optionen path .

Referens för OPTIONS

Alternativ Gäller för Beskrivning
format CSV, Parquet Källfilformat. Värden som stöds är csv och parquet.
path CSV, Parquet Fysisk OneLake-mapp, OneLake-mappgenväg eller ABFSS-sökväg till en enskild fil. Filer som finns tillgängliga i nästlade undermappar importeras rekursivt när vyn skapas. Använd ett snedstreck för en mapp eller inkludera filändelsen för en enskild fil.
header CSV Anger om den första raden i varje fil innehåller kolumnnamn. Standardinställningen är false.
delimiter CSV Fältavgränsare (till exempel, , eller |). Standardvärdet är ett kommatecken.
sep CSV Alias för delimiter.
quote CSV Tecken som används för att citera värden.
escape CSV Tecken används för att undkomma ett citat i ett redan angivet värde.
nullValue CSV Sträng som representerar ett null-värde.
ignoreLeadingWhiteSpace CSV Om man ska ta bort ledande mellanrum från värden.
ignoreTrailingWhiteSpace CSV Om man ska ta bort efterföljande mellanrum från värden.
multiLine CSV Om ett angivet värde kan sträcka sig över flera linjer. Standardinställningen är false.
dateFormat CSV Java-datummönster används för att tolka datumvärden, såsom MM/dd/yyyy.
timestampFormat CSV Java-tidsstämpelmönster används för att tolka tidsstämpelvärden.
encoding CSV Teckenkodning, såsom UTF-8, , , UTF-16, eller Windows-1252ISO-8859-1.
comment CSV Karaktär som markerar en rad som en kommentar att hoppa över.
inferSchema CSV Om man ska dra slutsatser om kolumntyper. När false, läses kolumnerna som strängar. Använd FIXED schemaläge när du inaktiverar inferens.
columnNameOfCorruptRecord CSV Namnet på en strängkolumn som tar emot råtexten för felaktigt bildade rader. Giltiga rader innehåller NULL i denna kolumn. Inkludera kolumnen i utdatan AS SELECT .

Important

Fabric hanterar hantering av missformade rader. Ange inte alternativet Spark CSV mode.

TBLPROPERTIES-referens

Property Värden Beskrivning
schema_mode DYNAMIC (standard), FIXED DYNAMIC lägger till nyupptäckta kolumner och skriver NULL när en fil inte innehåller en etablerad kolumn. FIXED fäster schemat vid skapandet och avvisar efterföljande drift.
refresh_mode APPEND_ONLY, FULL, MIRROR För mappar APPEND_ONLY lägger den till rader från nya filer, FULL bearbetar den aktuella mappen som en snapshot och MIRROR speglar filtillägg och borttagningar. En källa med en enda fil använder FULL semantik för uppdatering.

Example

Följande exempel läser in en mapp med CSV-filer med en rubrikrad i en bronsvy. Varje rad får också en __filepath__ kolumn som registrerar källfilen den lästes från.

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'
);

Du kan sedan bygga nedströms silver- och guldmaterialiserade sjövyer som väljer från bronze.raw_orders; Fabric registrerar beroendet och uppdaterar dem i ordning. För att spåra filer genom pipelinen, se Manage Fabric materialized lake views lineage.

Filtrera, transformera och validera filer under inmatning

Använd en FROM-less AS SELECT för att välja kolumner, filtrera rader, gjuta värden, lägga till beräknade kolumner, aggregera data eller tillämpa fönsterfunktioner. Begränsningar för filinmatning tillämpas på det projicerade resultatet, så en begränsning kan hänvisa till ett beräknat alias.

Följande exempel fångar felaktiga rader, tillämpar en radnivå-datakvalitetsregel, filtrerar indata och delar upp den materialiserade utdatan:

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;

Sök fångade rader för inspektion eller sanering:

SELECT
    _corrupt_record,
    __filepath__,
    ingested_at
FROM silver.valid_orders
WHERE _corrupt_record IS NOT NULL;

Du kan också skapa aggregerade eller fönsterbaserade materialiserade resultat direkt från filer:

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;

Stödda uttryck inkluderar standard Spark SQL-aritmetik, aggregerade, statistiska, fönster- och rangordningsfunktioner.

Inmata en enda fil

Ställ path in en CSV- eller Parquet-fil istället för en mapp. En källa med en enda fil använder FULL uppdateringssemantik, så att byta ut filen ersätter det materialiserade resultatet.

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'
);

Anmärkning

När du använder FIXED schema och källmappen innehåller flera filer med olika scheman vid tidpunkten för det initiala CREATE, misslyckas vyn eftersom den inte kan stämma med ett enda fast schema. Låt FIXED vyer peka på filer som använder samma schema, eller använd DYNAMIC. Detta är en känd begränsning, liknande fast schema-beteende i genvägstransformationer.

Important

Källvägar som innehåller ett råutrymme eller %20 accepteras inte för tillfället. Du kan använda en OneLake-mappgenväg som källa: creation tar in filer som finns tillgängliga vid genvägsroten och i nästlade mappar. Managed refresh upptäcker nya filer som lagts till vid genvägsroten, men upptäcker inte rekursivt nya filer som lagts till under inbäddade genvägsmappar.

Tips/Råd

För att bearbeta hela källmappen på begäran, kör REFRESH MATERIALIZED LAKE VIEW <name> FULL;. Precis som med tabellbaserade vyer, orkestrera inte löpande uppdatering från en anteckningsbok – använd Lineage och Scheduled refresh för att automatiskt hämta nya filer.

Hämta en lista över materialiserade sjövyer

Om du vill hämta listan över alla materialiserade sjövyer i ett schema använder du följande syntax:

SHOW MATERIALIZED LAKE VIEWS <IN/FROM> Schema_Name;

Om du till exempel vill visa en lista över alla materialiserade sjövyer i silver schemat:

SHOW MATERIALIZED LAKE VIEWS IN silver;

Hämta instruktionen som skapade en materialiserad sjövy

Använd följande syntax för att hämta instruktionen CREATE för en materialiserad sjövy:

SHOW CREATE MATERIALIZED LAKE VIEW MLV_Identifier;

Om du till exempel vill hämta definitionen av products_with_sales:

SHOW CREATE MATERIALIZED LAKE VIEW products_with_sales;

Uppdatera en materialiserad sjövy

Om du vill ändra definitionen av en materialiserad sjövy (till exempel SELECT frågan, begränsningar eller partitionering) använder du kommandot CREATE OR REPLACE . Du kan också ta bort den befintliga vyn och återskapa den.

Byt namn på en materialiserad sjövy

Om du vill byta namn på en befintlig materialiserad sjövy använder du ALTER MATERIALIZED LAKE VIEW kommandot . Syntaxen är:

ALTER MATERIALIZED LAKE VIEW MLV_Identifier RENAME TO MLV_Identifier_New;

Om du till exempel vill byta products_with_salesnamn på :

ALTER MATERIALIZED LAKE VIEW products_with_sales RENAME TO products_with_sales_v2;

Anmärkning

Kommandot ALTER MATERIALIZED LAKE VIEW stöds endast för att byta namn. Information om hur du ändrar definitionen eller andra egenskaper (till exempel SELECT frågan, begränsningar eller partitionering) finns i Uppdatera en materialiserad sjövy.

Ta bort en materialiserad sjövy

Du kan ta bort en materialiserad sjövy med hjälp av alternativet Ta bort i lakehouse-objektutforskaren eller genom att köra ett DROP kommando. Syntaxen är:

DROP MATERIALIZED LAKE VIEW MLV_Identifier;

Om du till exempel vill ta bort products_with_sales:

DROP MATERIALIZED LAKE VIEW products_with_sales;

Anmärkning

Att ta bort eller byta namn på en materialiserad sjövyvy påverkar härkomstvyn och den schemalagda uppdateringen. Se till att uppdatera referensen i alla beroende materialiserade sjövyer.

Aktuella begränsningar

Följande begränsningar gäller för Spark SQL-uttrycken för materialiserade sjövyer:

  • Schemanamn – Schemanamn med versaler (till exempel MYSCHEMA) stöds inte. Använd blandat skiftläge eller gemener.
  • Inga instruktioner för datamanipuleringsspråk (DML) – Du kan inte köra INSERT, UPDATEeller DELETE -instruktioner mot en materialiserad sjövy. Data fylls endast i av SELECT frågan i definitionen.
  • Inga tidsresefrågor – Frågan SELECT i en materialiserad sjövydefinition kan inte använda Delta Lake-tidsresesyntax (till exempel VERSION AS OF eller TIMESTAMP AS OF).
  • Inga användardefinierade funktioner – Användardefinierade funktioner (UDF: er) stöds inte i frågan SELECT som definierar en materialiserad sjövy.
  • Inga tillfälliga vyer som källor – Frågan SELECT kan referera till tabeller och andra materialiserade sjövyer, men inte tillfälliga vyer.
  • Spark-egenskaper på sessionsnivå – Spark-konfigurationsegenskaper som anges på sessionsnivå (till exempel spark.conf.set(...)) tillämpas inte under en schemalagd uppdatering. Ange egenskaper på sjöhus- eller arbetsytenivå i stället.
  • Filinsamling — Filinmatningsvyer stöder endast CSV och Parquet. En FIXED-schema-vy misslyckas om källmappen innehåller filer med olika scheman vid skapandetillfället. Källvägar kan inte innehålla mellanrum. OneLake-mappgenvägar stöds som källor, men managed refresh hittar inte rekursivt filer som lagts till under nästlade genvägsmappar.