Merk
Tilgang til denne siden krever autorisasjon. Du kan prøve å logge på eller endre kataloger.
Tilgang til denne siden krever autorisasjon. Du kan prøve å endre kataloger.
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
- Den
REFRESH_HINTer i forhåndsvisning. For mer informasjon om bruk av oppdateringstips, se Aktiver optimal oppdatering for slettinger og oppdateringer i materialiserte innsjøvisninger (forhåndsvisning). - Hvis navnet på arbeidsområdet ditt inneholder mellomrom, innkapsl det i backticks:
`My Workspace`.lakehouse.schema.view_name - Materialiserte innsjøvisningsnavn er kasus-sensitive og konverteres til små bokstaver (for eksempel
MyTestViewblir ).mytestview
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, ellerDELETEsetninger mot en materialisert lake-visning. Data fylles kun avSELECTspørringen i definisjonen. -
Ingen tidsreise-spørringer — Spørringen
SELECTi en materialisert lake view-definisjon kan ikke bruke Delta Lake tidsreisesyntaks (for eksempel,VERSION AS OFellerTIMESTAMP AS OF). -
Ingen brukerdefinerte funksjoner — Brukerdefinerte funksjoner (UDF) støttes ikke i
SELECTspørringen som definerer en materialisert innsjøvisning. -
Ingen midlertidige visninger som kilder — Spørringen
SELECTkan 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.