Spark SQL-referanse for materialiserte innsjøvisninger

Denne artikkelen gir Spark SQL-syntaksen for å lage, liste, omdøpe og slette materialiserte lake-visninger i Fabric.

Tips

For å lage din første materialiserte innsjøutsikt, se Kom i gang med materialiserte innsjøutsikter.

Opprette en materialisert innsjøvisning

Du kan definere en materialisert innsjøvisning fra en hvilken som helst tabell eller fra en annen materialisert innsjøvisning i et innsjø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 

Merk deg

Argumenter

Parameter Bekrivelse
OR REPLACE Overskriver enhver eksisterende materialisert innsjøutsikt med samme navn. Kan ikke kombineres med IF NOT EXISTS.
IF NOT EXISTS Skaper den materialiserte innsjøutsikten bare hvis den ikke allerede eksisterer. Utsagnet lykkes uten feil hvis visningen allerede er definert. Kan ikke kombineres med OR REPLACE.
MLV_Identifier Navnet på den materialiserte utsikt over innsjøen. Kan være fullt kvalifisert som workspace.lakehouse.schema.name.
CONSTRAINT ... CHECK Definerer en datakvalitetsregel. Klausulen CHECK spesifiserer et boolsk uttrykk som hver rad må oppfylle. Du kan definere flere begrensninger.
ON MISMATCH Handling å ta når en rad bryter en begrensning. DROP fjerner lydløst raden; FAIL Stopper oppdateringen med en feilmelding. Standard er FAIL.
REFRESH_HINT Deklarerer én eller flere kolonner som entydig identifiserer rader for inkrementell behandling av oppdateringer og slettinger (forhåndsvisning).
PARTITIONED BY Kolonner for å partisjonere den materialiserte innsjøvisningen etter, noe som kan forbedre spørringsytelsen for filtrerte lesninger.
COMMENT Fritekstbeskrivelse lagret sammen med den materialiserte innsjøutsiktsdefinisjonen.
TBLPROPERTIES Nøkkelverdipar lagret som metadata på den materialiserte innsjøvisningen.
AS select_statement Spørringen SELECT som definerer dataene i den materialiserte innsjøvisningen.

Eksempler

Følgende eksempel skaper en materialisert innsjøvisning med en datakvalitetsbegrensning, en kommentar og partisjonering. 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 gir en enklere materialisert innsjøutsikt. Klausulen IF NOT EXISTS forhindrer en feil hvis visningen allerede eksisterer, noe som gjør den trygg for distribusjonsskript.

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

Oppfrisk materialisert innsjøutsikt fra hytta di

Etter at du har laget dine materialiserte innsjøutsikter, ikke orkestrer oppdateringen fra en notatbok. Bruk i stedet de to innebygde funksjonene på innsjøhuset:

  • Lineage: Fabric utleder avhengighetsrekkefølgen mellom dine materialiserte innsjøutsikter fra deres definisjoner. For å åpne linjevisningen, velg fanen Materialiserte innsjøvisninger i båndet, og velg deretter Administrer. Derfra kan du følge en pågående kjøring og inspisere avhengigheter oppstrøms og nedstrøms for hver visning.
  • Planlagt oppdatering: Fra samme Administrer-visning , lag en eller flere tidsplaner for å oppdatere alle materialiserte innsjøvisninger eller et valgt delsett. Hver plan kjører uavhengig og oppdaterer visninger i avhengighetsrekkefølge, så nedstrømsvisninger leser alltid ferske data fra sine oppstrømsvisninger. Fabric prøver transiente feil for deg.

Bruk notatbøker til å skrive og iterere på dine materialiserte definisjoner av innsjøutsikt. La lineage og planlagt oppdatering håndtere rekkefølge, utførelse og forsøk — for pålitelige, repeterbare data med mindre kode å vedlikeholde.

Importer filer med USING OneLake_Files

I tillegg til å definere en materialisert innsjøvisning fra tabeller, kan du definere en som importerer CSV- eller Parquet-filer direkte fra OneLake. En filinntaksvisning brukes USING OneLake_Files med en fysisk OneLake-mappe, en OneLake-mappesnarvei eller en enkeltfilsti. Du kan valgfritt bruke en FROM-less-klausul AS SELECT for å filtrere, forme og aggregere kilden etter hvert som den tas inn.

Tabellen nedenfor viser hvilken syntaks som gjelder for hver forfatterstil:

Aspekt Tabellbasert materialisert innsjøutsikt Filbasert materialisert innsjøutsikt
kilde Tabeller eller andre materialiserte innsjøutsikter En fysisk OneLake-mappe, OneLake-mappesnarvei eller enkeltfil
Definisjon AS select_statement USING OneLake_Files + OPTIONS + valgfri FROM-less AS SELECT
Formater Enhver spørrbar tabell CSV, Parquet
Skjema Avledet fra SELECT schema_mode = DYNAMIC eller FIXED
Kildelinje Tabeller/visninger oppstrøms Kildelokasjon; projiser eventuelt kildemetadata-kolonnen __filepath__ når du trenger sporbarhet per rad-fil
Typisk lag Sølv, gull Bronse
Datakvalitetsbegrensninger Støttes Støttet ved inntak

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

Merk deg

Ikke spesifiser en FROM klausul i filinntaket AS SELECT. Kilden er allerede bundet av USING OneLake_Files og opsjonen path .

OPSJONSREFERANSE

Alternativ Gjelder for Bekrivelse
format CSV, Parquet Kildefilformat. Støttede verdier er csv og parquet.
path CSV, Parquet Fysisk OneLake-mappe, OneLake-mappesnarvei eller enkeltfil ABFSS-sti. Filer som er tilgjengelige i nestede undermapper, importeres rekursivt når visningen opprettes. Bruk en etterfølgende skråstrek for en mappe eller inkluder filendelsen for en enkelt fil.
header CSV Angir om første rad i hver fil inneholder kolonnenavn. Standardverdien er false.
delimiter CSV Feltskilletegn (for eksempel, , eller |). Som standard er det et komma.
sep CSV Alias for delimiter.
quote CSV Tegn brukt til å sitere verdier.
escape CSV Tegn brukt for å unnslippe et tilbud innenfor en allerede oppgitt verdi.
nullValue CSV Streng som representerer en nullverdi.
ignoreLeadingWhiteSpace CSV Om man skal fjerne ledende mellomrom fra verdier.
ignoreTrailingWhiteSpace CSV Om man skal fjerne etterfølgende mellomrom fra verdier.
multiLine CSV Om en oppgitt verdi kan strekke seg over flere linjer. Standardverdien er false.
dateFormat CSV Java-datomønster brukt til å analysere datoverdier, slik som MM/dd/yyyy.
timestampFormat CSV Java-tidsstempelmønster brukes til å tolke tidsstempelverdier.
encoding CSV Tegnkoding, slik som UTF-8, ISO-8859-1, , UTF-16eller Windows-1252.
comment CSV Karakter som markerer en linje som en kommentar å hoppe over.
inferSchema CSV Om man skal slutte seg til kolonnetyper. Når false, leses kolonnene som strenger. Bruk FIXED skjemamodus når du deaktiverer inferens.
columnNameOfCorruptRecord CSV Navnet på en strengkolonne som mottar råteksten for feildannede rader. Gyldige rader inneholder NULL i denne kolonnen. Inkluder kolonnen i utdataen AS SELECT .

Important

Fabric håndterer håndtering av misformede rader. Ikke sett Spark CSV-alternativet mode .

TBLPROPERTIES-referanse

Egenskap Verdier Bekrivelse
schema_mode DYNAMIC (standard), FIXED DYNAMIC legger til nylig oppdagede kolonner og skriver NULL når en fil ikke inneholder en etablert kolonne. FIXED fester skjemaet ved opprettelsen og avviser påfølgende drift.
refresh_mode APPEND_ONLY, FULL, MIRROR For mapper legger den APPEND_ONLY til rader fra nye filer, FULL behandler den nåværende mappen på nytt som et øyeblikksbilde, og MIRROR reflekterer filtillegg og slettinger. En enkeltfilkilde bruker FULL oppdateringssemantikk.

Eksempel

Følgende eksempel importerer en mappe med CSV-filer med en header-rad inn i en bronsevisning. Hver rad får også en __filepath__ kolonne som registrerer kildefilen den ble lest 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 deretter bygge nedstrøms sølv- og gullmaterialiserte innsjøutsikter som velger fra bronze.raw_orders; Fabric registrerer avhengigheten og oppdaterer dem i rekkefølge. For å spore filer gjennom pipelinen, se Manage Fabric materialized lake views lineage.

Filtrer, transformer og valider filer under inntasting

Bruk en FROM-less AS SELECT for å velge kolonner, filtrere rader, kaste verdier, legge til beregnede kolonner, aggregere data eller anvende vindusfunksjoner. Filinntaksbegrensninger kjører mot den projiserte utdataen, slik at en begrensning kan referere til et beregnet alias.

Følgende eksempel fanger opp feildannede rader, anvender en radnivå-regel for datakvalitet, filtrerer inputen og deler opp den materialiserte outputen:

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 etter fangede rader for inspeksjon eller utbedring:

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

Du kan også lage aggregerte eller vindusbaserte materialiserte 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;

Støttede uttrykk inkluderer standard Spark SQL aritmetikk, aggregerte, statistiske, vindus- og rangeringsfunksjoner.

Importer en enkelt fil

Sett path til en CSV- eller Parquet-fil i stedet for en mappe. En enkeltfilkilde bruker FULL oppdateringssemantikk, så å erstatte filen erstatter det materialiserte 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'
);

Merk deg

Når du bruker FIXED skjema og kildemappen inneholder flere filer med forskjellige skjemaer på tidspunktet for den første CREATE, feiler visningen fordi den ikke klarer å avstemme et enkelt fast skjema. Pek FIXED visninger på filer som deler ett skjema, eller bruk DYNAMIC. Dette er en kjent begrensning, lik fast skjema-oppførsel i snarveistransformasjoner.

Important

Kildestier som inneholder et rå område eller %20 som for øyeblikket ikke aksepteres. Du kan bruke en OneLake-mappesnarvei som kilde: opprettelsen importerer filer som er tilgjengelige i snarveiroten og i nestede mapper. Managed refresh oppdager nye filer lagt til ved snarveiroten, men oppdager ikke rekursivt nye filer lagt til under nestede snarveismapper.

Tips

For å behandle hele kildemappen på nytt på forespørsel, kjør REFRESH MATERIALIZED LAKE VIEW <name> FULL;. Som med tabellbaserte visninger, ikke orkestrer kontinuerlig oppdatering fra en notatbok — bruk Lineage og Scheduled refresh for å plukke opp nye filer automatisk.

Få en liste over materialiserte innsjøvisninger

For å få listen over alle materialiserte lake-visninger i et skjema, bruk følgende syntaks:

SHOW MATERIALIZED LAKE VIEWS <IN/FROM> Schema_Name;

For eksempel, for å liste opp alle materialiserte innsjøutsikter i skjemaet silver :

SHOW MATERIALIZED LAKE VIEWS IN silver;

Hente setningen som opprettet en materialisert innsjøvisning

For å få CREATE utsagnet for en materialisert lake-visning, bruk følgende syntaks:

SHOW CREATE MATERIALIZED LAKE VIEW MLV_Identifier;

For eksempel, for å hente definisjonen av products_with_sales:

SHOW CREATE MATERIALIZED LAKE VIEW products_with_sales;

Oppdatere en materialisert utsikt over innsjøen

For å endre definisjonen av en materialisert innsjøvisning (som SELECT spørring, begrensninger eller partisjonering), bruk kommandoen CREATE OR RESTORE. Alternativt kan du slette den eksisterende visningen og lage den på nytt.

Gi nytt navn til en materialisert innsjøutsikt

For å gi nytt navn til en eksisterende materialisert innsjøutsikt, bruk kommandoen ALTER MATERIALIZED LAKE VIEW . Syntaksen er:

ALTER MATERIALIZED LAKE VIEW MLV_Identifier RENAME TO MLV_Identifier_New;

For eksempel, for å gi nytt navn:products_with_sales

ALTER MATERIALIZED LAKE VIEW products_with_sales RENAME TO products_with_sales_v2;

Merk deg

Kommandoen ALTER MATERIALIZED LAKE VIEW støttes kun for omdøping. For å endre definisjonen eller andre egenskaper (som SELECT spørring, begrensninger eller partisjonering), se Oppdater en materialisert innsjøvisning.

Slett en materialisert innsjøutsikt

Du kan slette en materialisert innsjøvisning ved å bruke Delete-alternativet i lakehouse-objektutforskeren eller ved å kjøre en DROP kommando. Syntaksen er:

DROP MATERIALIZED LAKE VIEW MLV_Identifier;

For eksempel, for å slette products_with_sales:

DROP MATERIALIZED LAKE VIEW products_with_sales;

Merk deg

Hvis du slipper eller gir nytt navn til en materialisert innsjøvisning, påvirkes avstammingsvisningen og planlagt oppdatering. Pass på at du oppdaterer referansen i alle avhengige materialiserte innsjøvisninger.

Gjeldende begrensninger

Følgende begrensninger gjelder for Spark SQL-setningene for materialiserte innsjøutsikter:

  • Skjemanavn — Skjemanavn med store bokstaver (for eksempel MYSCHEMA) støttes ikke. Bruk blandede eller små bokstaver.
  • Ingen data manipulation language (DML)-setninger — Du kan ikke kjøre INSERT, UPDATE, eller DELETE setninger mot en materialisert lake-visning. Data fylles kun av SELECT spørringen i definisjonen.
  • Ingen tidsreise-spørringer — Spørringen SELECT i en materialisert lake view-definisjon kan ikke bruke Delta Lake tidsreisesyntaks (for eksempel, VERSION AS OF eller TIMESTAMP AS OF).
  • Ingen brukerdefinerte funksjoner — Brukerdefinerte funksjoner (UDF) støttes ikke i SELECT spørringen som definerer en materialisert innsjøvisning.
  • Ingen midlertidige visninger som kilder — Spørringen SELECT kan referere tabeller og andre materialiserte innsjøvisninger, men ikke midlertidige visninger.
  • Sesjonsnivå Spark-egenskaper — Spark-konfigurasjonsegenskaper satt på sesjonsnivå (for eksempel spark.conf.set(...)) brukes ikke under en planlagt oppdatering. Sett eiendommer på lakehouse- eller arbeidsområdenivå i stedet.
  • Filinntak — Filinntastingsvisninger støtter kun CSV og Parquet. En FIXED-schema-visning feiler hvis kildemappen inneholder filer med forskjellige skjemaer ved opprettelse. Kildestier kan ikke inneholde mellomrom. OneLake-mappesnarveier støttes som kilder, men administrert oppdatering oppdager ikke rekursivt filer lagt til under nestede snarveismapper.