Spark SQL-reference til materialiserede søvisninger

Denne artikel giver Spark SQL-syntaksen til oprettelse, liste, omdøbning og sletning af materialiserede lake-visninger i Fabric.

Tips

For at skabe din første materialiserede søudsigt, se Kom i gang med materialiserede søudsigter.

Oprette en materialiseret søvisning

Du kan definere en materialiseret søvisning fra en hvilken som helst tabel eller fra en anden materialiseret søvisning i et søhus.

Syntaks

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 

Notat

Argumenter

Parameter Beskrivelse
OR REPLACE Overskriver enhver eksisterende materialiseret søudsigt med samme navn. Kan ikke kombineres med IF NOT EXISTS.
IF NOT EXISTS Skaber kun den materialiserede søudsigt, hvis den ikke allerede eksisterer. Udsagnet lykkes fejlfrit, hvis visningen allerede er defineret. Kan ikke kombineres med OR REPLACE.
MLV_Identifier Navnet på den materialiserede søvisning. Kan være fuldt kvalificeret som workspace.lakehouse.schema.name.
CONSTRAINT ... CHECK Definerer en datakvalitetsregel. Klausulen CHECK specificerer et boolesk udtryk, som hver række skal opfylde. Du kan definere flere begrænsninger.
ON MISMATCH Handling at tage, når en række overtræder en begrænsning. DROP fjerner lydløst rækken; FAIL Stopper opdateringen med en fejl. Standard er FAIL.
REFRESH_HINT Deklarerer en eller flere kolonner, der entydigt identificerer rækker, til inkrementel behandling af opdateringer og sletninger (forhåndsvisning).
PARTITIONED BY Kolonner til at opdele den materialiserede søvisning efter, hvilket kan forbedre forespørgselsydelsen for filtrerede læsninger.
COMMENT Fritekstbeskrivelse gemt med den materialiserede søudsigtsdefinition.
TBLPROPERTIES Nøgleværdipar gemt som metadata på den materialiserede søvisning.
AS select_statement Forespørgslen SELECT , der definerer dataene i det materialiserede søvisning.

Eksempler

Følgende eksempel skaber en materialiseret lake-visning med en datakvalitetsbegrænsning, en kommentar og partitionering. Klausulen OR REPLACE overskriver enhver eksisterende visning med samme navn.

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

Følgende eksempel skaber et enklere materialiseret søbillede. Klausulen IF NOT EXISTS forhindrer fejl, hvis visningen allerede eksisterer, hvilket gør den sikker for deployment-scripts.

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

Vedligehold materialiseret søudsigt fra dit søhus

Når du har skabt dine materialiserede søudsigter, skal du ikke orkestrere deres opdatering fra en notesbog. Brug i stedet de to indbyggede funktioner på søhuset:

  • Lineage: Fabric udleder afhængighedsrækkefølgen mellem dine materialiserede søudsigter ud fra deres definitioner. For at åbne linjevisningen skal du vælge fanen Materialiserede søvisninger i båndet, og derefter vælge Styr. Derfra kan du følge et kørsel i gang og inspicere opstrøms og nedstrøms afhængigheder for hver visning.
  • Planlagt opdatering: Fra samme Administrér-visning opret en eller flere tidsplaner for at opdatere alle materialiserede søudsigter eller et udvalgt delmængde. Hver tidsplan kører uafhængigt og opdaterer visninger i afhængighedsrækkefølge, så downstream-visninger læser altid friske data fra deres upstream-visninger. Fabric prøver at genoverveje forbigående fejl for dig.

Brug notesbøger til at skrive og iterere på dine materialiserede lake view-definitioner. Lad lineage og planlagt opdatering håndtere rækkefølge, udførelse og genforsøg — for pålidelige, gentagelige data med mindre kode at vedligeholde.

Indtast filer med USING OneLake_Files

Ud over at definere en materialiseret lake-visning fra tabeller, kan du også definere en, der indlæser CSV- eller Parquet-filer direkte fra OneLake. En filindlæsningsvisning bruges USING OneLake_Files sammen med en fysisk OneLake-mappe, en OneLake-mappegenvej eller en enkeltfilsti. Du kan valgfrit bruge en FROM-less-klausul AS SELECT til at filtrere, forme og aggregere kilden, efterhånden som den indlæses.

Følgende tabel viser, hvilken syntaks der gælder for hver forfatterstil:

Aspekt Tabelbaseret materialiseret søudsigt Filbaseret materialiseret søudsigt
Kilde Tabeller eller andre materialiserede søudsigter En fysisk OneLake-mappe, OneLake-mappegenvej eller enkeltfil
Definition AS select_statement USING OneLake_Files + OPTIONS + valgfrit FROM-less AS SELECT
Formater Enhver forespørgebar tabel CSV, Parquet
Skema Afledt af SELECT schema_mode = DYNAMIC eller FIXED
Kildelinje Upstream-tabeller/visninger Kildeplacering; projicere eventuelt kildemetadata-kolonnen __filepath__ , når du har brug for sporbarhed pr. række filer
Typisk lag Sølv, guld Bronze
Datakvalitetsbegrænsninger Understøttet Understøttet ved indtagelse

Syntaks

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

Notat

Angiv ikke en FROM klausul i fil-ingestionen AS SELECT. Kilden er allerede bundet af USING OneLake_Files og muligheden path .

OPTIONS-reference

Valgmulighed Gælder for Beskrivelse
format CSV, Parquet Kildefilformat. Understøttede værdier er csv og parquet.
path CSV, Parquet Fysisk OneLake-mappe, OneLake-mappegenvej eller enkeltfil ABFSS-sti. Filer tilgængelige i indlejrede undermapper indlæses rekursivt, når visningen oprettes. Brug en efterfølgende skråstreg til en mappe eller inkluder filendelsen for en enkelt fil.
header CSV Angiver om den første række i hver fil indeholder kolonnenavne. Som standard er det false.
delimiter CSV Feltafgrænsetegnet (for eksempel , eller |). Som standard er det et komma.
sep CSV Alias for delimiter.
quote CSV Tegn brugt til at citere værdier.
escape CSV Tegn brugt til at undslippe et citat inden for en allerede oplyst værdi.
nullValue CSV Streng, der repræsenterer en nulværdi.
ignoreLeadingWhiteSpace CSV Om man skal fjerne ledende mellemrum fra værdier.
ignoreTrailingWhiteSpace CSV Om man skal fjerne trailing spaces fra værdier.
multiLine CSV Om en oplyst værdi kan spænde over flere linjer. Som standard er det false.
dateFormat CSV Java-dateringsmønsteret bruges til at analysere datoværdier, såsom MM/dd/yyyy.
timestampFormat CSV Java-tidsstempelmønster bruges til at parse tidsstempelværdier.
encoding CSV Tegnkodning, såsom UTF-8, , , UTF-16, eller Windows-1252ISO-8859-1.
comment CSV Karakter, der markerer en linje som en kommentar, der skal springes over.
inferSchema CSV Om man skal udlede kolonnetyper. Når false, læses kolonnerne som strenge. Brug FIXED skema-tilstand, når du deaktiverer inferens.
columnNameOfCorruptRecord CSV Navnet på en strengkolonne, der modtager den rå tekst for fejldannede rækker. Gyldige rækker indeholder NULL i denne kolonne. Inkluder kolonnen i AS SELECT outputtet.

Vigtigt!

Fabric håndterer håndtering af misformede rækker. Sæt ikke Spark CSV-muligheden mode .

TBLPROPERTIES-reference

Egenskab Værdier Beskrivelse
schema_mode DYNAMIC (standard), FIXED DYNAMIC tilføjer nyligt opdagede kolonner og skriver NULL , når en fil ikke indeholder en etableret kolonne. FIXED fastholder skemaet ved oprettelsen og afviser efterfølgende drift.
refresh_mode APPEND_ONLY, FULL, MIRROR For mapper APPEND_ONLY tilføjer den rækker fra nye filer, FULL behandler den aktuelle mappe som et snapshot og MIRROR afspejler filtilføjelser og sletninger. En enkeltfilkilde bruger FULL opdateringssemantik.

Eksempel

Følgende eksempel indlæser en mappe med CSV-filer med en header-række til en bronzevisning. Hver række får også en __filepath__ kolonne, der registrerer kildefilen, den blev læst fra.

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 derefter bygge nedstrøms sølv- og guldmaterialiserede søudsigter, der vælger fra bronze.raw_orders; Fabric registrerer afhængigheden og opdaterer dem i rækkefølge. For at spore filer gennem pipelinen, se Manage Fabric materialized lake views lineage.

Filtrer, transformer og valider filer under indlæsning

Brug en FROM-less AS SELECT til at vælge kolonner, filtrere rækker, kaste værdier, tilføje beregnede kolonner, aggregere data eller anvende vinduesfunktioner. Fil-indlæsningsbegrænsninger kører mod det projicerede output, så en begrænsning kan referere til et beregnet alias.

Følgende eksempel fanger fejldannede rækker, anvender en række-niveau datakvalitetsregel, filtrerer inputtet og opdeler det materialiserede output:

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;

Forespørg indfangede rækker til inspektion eller udbedring:

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

Du kan også skabe aggregerede eller vinduesbaserede materialiserede resultater direkte fra 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;

Understøttede udtryk inkluderer standard Spark SQL aritmetik, aggregerede, statistiske, vindues- og rangordningsfunktioner.

Indtag en enkelt fil

Sæt path til en CSV- eller Parquet-fil i stedet for en mappe. En enkeltfil-kilde bruger FULL refresh-semantik, så udskiftning af filen erstatter det materialiserede resultat.

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

Notat

Når du bruger FIXED skema, og kildemappen indeholder flere filer med forskellige skemaer på tidspunktet for den indledende CREATE, fejler visningen, fordi den ikke kan afstemme et enkelt fast skema. Peg FIXED visninger på filer, der deler ét skema, eller brug DYNAMIC. Dette er en kendt begrænsning, lignende fast-skema-adfærd i genvejstransformationer.

Vigtigt!

Kildestier, der indeholder et rå rum eller %20 ikke accepteres i øjeblikket. Du kan bruge en OneLake-mappegenvej som kilde: oprettelse indlæser filer, der er tilgængelige ved genvejsroden og i indlejrede mapper. Managed refresh opdager nye filer, der er tilføjet ved genvejsroden, men opdager ikke rekursivt nye filer, der er tilføjet under indlejrede genvejsmapper.

Tips

For at genbehandle hele kildemappen efter behov, kør REFRESH MATERIALIZED LAKE VIEW <name> FULL;. Som med tabelbaserede visninger, skal du ikke orkestrere løbende opdatering fra en notesbog – brug Lineage og Scheduled refresh til automatisk at hente nye filer.

Få en liste over materialiserede søudsigter

For at få listen over alle materialiserede søudsigter i et skema, brug følgende syntaks:

SHOW MATERIALIZED LAKE VIEWS <IN/FROM> Schema_Name;

For eksempel for at liste alle materialiserede søudsigter i skemaet silver :

SHOW MATERIALIZED LAKE VIEWS IN silver;

Hente den sætning, der oprettede en materialiseret søvisning

For at få udsagnet CREATE for en materialiseret lake-visning, brug følgende syntaks:

SHOW CREATE MATERIALIZED LAKE VIEW MLV_Identifier;

For eksempel, for at hente definitionen af products_with_sales:

SHOW CREATE MATERIALIZED LAKE VIEW products_with_sales;

Opdater en materialiseret søvisning

For at ændre definitionen af en materialiseret søvisning (såsom SELECT forespørgslen, begrænsninger eller partitionering), brug kommandoen CREATE OR RESTORE. Alternativt kan du slette den eksisterende visning og genskabe den.

Omdøb en materialiseret søudsigt

For at omdøbe et eksisterende materialiseret søsyn, brug kommandoen ALTER MATERIALIZED LAKE VIEW . Syntaksen er:

ALTER MATERIALIZED LAKE VIEW MLV_Identifier RENAME TO MLV_Identifier_New;

For eksempel at omdøbe products_with_sales:

ALTER MATERIALIZED LAKE VIEW products_with_sales RENAME TO products_with_sales_v2;

Notat

Kommandoen ALTER MATERIALIZED LAKE VIEW understøttes kun til omdøbning. For at ændre definitionen eller andre egenskaber (såsom SELECT forespørgslen, begrænsninger eller opdeling), se Opdater en materialiseret søvisning.

Slet et materialiseret sø-view

Du kan slette en materialiseret søvisning ved at bruge Slet-muligheden i lakehouse-objektstifinderen eller ved at køre en DROP kommando. Syntaksen er:

DROP MATERIALIZED LAKE VIEW MLV_Identifier;

For eksempel for at slette products_with_sales:

DROP MATERIALIZED LAKE VIEW products_with_sales;

Notat

Hvis du slipper eller omdøber en materialiseret søvisning, påvirker det afstamningsvisningen og den planlagte opdatering. Sørg for at opdatere referencen i alle afhængige materialiserede søvisninger.

Aktuelle begrænsninger

Følgende begrænsninger gælder for Spark SQL-sætningerne for materialiserede søvisninger:

  • Skemanavne — Skemanavne med store bogstaver (for eksempel MYSCHEMA) understøttes ikke. Brug blandede bogstaver eller små bogstaver.
  • Ingen data manipulation language (DML) udsagn — Du kan ikke køre INSERT, UPDATE, eller DELETE udsagn mod en materialiseret lake view. Data udfyldes kun af forespørgslen SELECT i definitionen.
  • Ingen tidsrejseforespørgsler — Forespørgslen SELECT i en materialiseret lake view-definition kan ikke bruge Delta Lake tidsrejsesyntaks (for eksempel, VERSION AS OF eller TIMESTAMP AS OF).
  • Ingen brugerdefinerede funktioner — Brugerdefinerede funktioner (UDF'er) understøttes ikke i forespørgslen, SELECT der definerer en materialiseret lake-visning.
  • Ingen midlertidige visninger som kilder — Forespørgslen SELECT kan referere til tabeller og andre materialiserede søudsigter, men ikke midlertidige visninger.
  • Sessionsniveau Spark-egenskaber — Spark-konfigurationsegenskaber sat på sessionsniveau (for eksempel spark.conf.set(...)) anvendes ikke under en planlagt opdatering. Sæt ejendomme på søhus- eller arbejdsområdeniveau i stedet.
  • Filindlæsning — Filindlæsningsvisninger understøtter kun CSV og Parquet. En FIXED-schema-visning fejler, hvis kildemappen indeholder filer med forskellige skemaer ved oprettelse. Kildestier kan ikke indeholde mellemrum. OneLake-mappegenveje understøttes som kilder, men managed refresh opdager ikke rekursivt filer, der er tilføjet under indlejrede genvejsmapper.