Riferimenti a Spark SQL per viste materializzate del lake

Questo articolo fornisce la sintassi SQL di Spark per creare, elencare, rinominare e eliminare le viste materializzate dei laghi in Fabric.

Suggerimento

Per creare la prima vista lake materializzata, vedere Introduzione alle viste lake materializzate.

Creare una vista materializzata del lago

È possibile definire una vista lago materializzata da qualsiasi tabella o da un'altra vista lago materializzata all'interno di una lakehouse.

Sintassi

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 

Annotazioni

Arguments

Parametro Descrizione
OR REPLACE Sovrascrive qualsiasi vista materializzata del lake esistente con lo stesso nome. Non è possibile combinare con IF NOT EXISTS.
IF NOT EXISTS Crea la vista materializzata del lago solo se non esiste già. L'istruzione viene eseguita con successo senza errori se la vista è già definita. Non è possibile combinare con OR REPLACE.
MLV_Identifier Nome della vista del lago materializzata. Può essere completamente qualificato come workspace.lakehouse.schema.name.
CONSTRAINT ... CHECK Definisce una regola di qualità dei dati. La CHECK clausola specifica un'espressione booleana che ogni riga deve soddisfare. È possibile definire più vincoli.
ON MISMATCH Azione da eseguire quando una riga viola un vincolo. DROP rimuove automaticamente la riga; FAIL arresta l'aggiornamento con un errore. Il valore predefinito è FAIL.
REFRESH_HINT Dichiara una o più colonne che identificano in modo univoco le righe per l'elaborazione incrementale di aggiornamenti e cancellazioni (anteprima).
PARTITIONED BY Colonne per partizionare la vista lake materializzata, in modo da migliorare le prestazioni delle query per le letture filtrate.
COMMENT Descrizione di testo libero archiviata con la definizione di vista lake materializzata.
TBLPROPERTIES Coppie chiave-valore archiviate come metadati nella vista lake materializzata.
AS select_statement Query SELECT che definisce i dati nella vista materializzata del lake.

Esempi

Nell'esempio seguente viene creata una vista del lago materializzata con un vincolo di qualità dei dati, un commento e un sistema di partizionamento. La OR REPLACE clausola sovrascrive qualsiasi vista esistente con lo stesso nome.

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

Nell'esempio seguente viene creata una vista lake materializzata più semplice. La IF NOT EXISTS clausola impedisce un errore se la vista esiste già, rendendola sicura per gli script di distribuzione.

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

Suggerimento

Gestire l'aggiornamento della vista lake materializzata dal tuo lakehouse

Dopo aver creato le viste lake materializzate, non orchestrare l'aggiornamento da un notebook. Usare invece le due funzionalità predefinite nel lakehouse:

  • Derivazione: Fabric deriva l'ordine di dipendenza tra le viste lake materializzate dalle relative definizioni. Per aprire la visualizzazione derivazione, selezionare la scheda Viste lake materializzate nella barra multifunzione e quindi selezionare Gestisci. Da qui è possibile seguire un'esecuzione in corso ed esaminare le dipendenze upstream e downstream per ogni visualizzazione.
  • Aggiornamento pianificato: dalla stessa visualizzazione Gestisci creare una o più pianificazioni per aggiornare tutte le viste lake materializzate o un subset selezionato. Ogni pianificazione viene eseguita in modo indipendente e aggiorna le viste in ordine di dipendenza, quindi le viste downstream leggono sempre i dati aggiornati dalle visualizzazioni upstream. Fabric ritenta automaticamente gli errori temporanei.

Usa i notebook per creare e perfezionare le definizioni delle viste materializzate del lake. Affida alla tracciabilità dei dati e all'aggiornamento pianificato la gestione dell'ordinamento, dell'esecuzione e dei nuovi tentativi, per dati affidabili e coerenti con meno codice da mantenere.

Importa file con USING OneLake_Files

Oltre a definire una vista lacustre materializzata dalle tabelle, puoi definirne una che assorba file CSV o Parquet direttamente da OneLake. Una vista per l'acquisizione di file utilizza USING OneLake_Files con una cartella OneLake fisica, un collegamento a una cartella OneLake o il percorso di un singolo file. Puoi opzionalmente usare una clausola senza FROM AS SELECT per filtrare, modellare e aggregare la sorgente man mano che viene ingerita.

La tabella seguente mostra quale sintassi si applica a ciascun stile di scrittura:

Aspect Vista materializzata del data lake basata su tabelle Vista del lago materializzato basata su file
Fonte Tavoli o altre viste materializzate sul lago Una cartella fisica OneLake, una scorciatoia per una cartella OneLake o un singolo file
Definizione AS select_statement USING OneLake_Files + OPTIONS + opzionale senza FROM AS SELECT
Formati Qualsiasi tabella consultabile CSV, Parquet
Schema Derivato dal SELECT schema_mode = DYNAMIC o FIXED
Tracciabilità della fonte Tabelle / viste di origine Posizione della sorgente; opzionalmente proiettare la __filepath__ colonna dei metadati sorgente quando hai bisogno di tracciabilità file per riga
Strato tipico Argento, oro Bronzo
Vincoli di qualità dei dati Supportato Supportato al momento dell'ingestione

Sintassi

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

Annotazioni

Non specificare una FROM clausola nell'ingestione AS SELECTdel file . La fonte è già vincolata da USING OneLake_Files e l'opzione path .

Riferimento di OPTIONS

Option Si applica a Descrizione
format CSV, Parquet Formato del file sorgente. I valori supportati sono csv e parquet.
path CSV, Parquet Cartella fisica OneLake, scorciatoia per cartelle OneLake o percorso ABFSS a file singolo. I file disponibili nelle sottocartelle annidate vengono ingeriti ricorsivamente quando la vista viene creata. Usa una barra di fine per una cartella o includi l'estensione del file per un singolo file.
header CSV Indica se la prima riga di ogni file contiene nomi di colonne. Di default è false.
delimiter CSV Carattere delimitatore di campo (ad esempio, , o |). Di default è una virgola.
sep CSV Alias per delimiter.
quote CSV Carattere utilizzato per racchiudere i valori tra virgolette.
escape CSV Personaggio usato per sfuggire a una citazione all'interno di un valore già citato.
nullValue CSV Stringa che rappresenta un valore Null.
ignoreLeadingWhiteSpace CSV Se rimuovere gli spazi principali dai valori.
ignoreTrailingWhiteSpace CSV Se eliminare gli spazi finali dai valori.
multiLine CSV Se un valore citato può coprire più righe. Di default è false.
dateFormat CSV Pattern di data in Java usato per analizzare i valori di data, come MM/dd/yyyy.
timestampFormat CSV Formato timestamp Java usato per interpretare i valori timestamp.
encoding CSV Codifica dei caratteri, come UTF-8, ISO-8859-1, UTF-16, o Windows-1252.
comment CSV Carattere che contrassegna una riga come commento da ignorare.
inferSchema CSV Se dedurre i tipi di colonne. Quando false, le colonne sono lette come stringhe. Usa FIXED la modalità schema quando disabiliti l'inferenza.
columnNameOfCorruptRecord CSV Nome di una colonna di tipo stringa che riceve il testo grezzo delle righe non valide. Le righe valide contengono NULL in questa colonna. Includi la colonna nell'output AS SELECT .

Importante

Fabric gestisce la gestione delle righe malformate. Non impostare l'opzione CSV mode di Spark.

Riferimento di TBLPROPERTIES

Proprietà Values Descrizione
schema_mode DYNAMIC (impostazione predefinita), FIXED DYNAMIC aggiunge colonne appena scoperte e scrive NULL quando un file non contiene una colonna stabilita. FIXED fissa lo schema alla creazione e rifiuta la deriva successiva.
refresh_mode APPEND_ONLY, FULL, MIRROR Per le cartelle, APPEND_ONLY aggiunge righe da nuovi file, FULL rielabora la cartella corrente come istantanea e MIRROR riflette aggiunte e cancellazioni di file. Una sorgente a singolo file utilizza la semantica di aggiornamento FULL.

Example

Il seguente esempio assorbe una cartella di file CSV con una riga di intestazione in una vista bronzo. Ogni riga riceve anche una __filepath__ colonna che registra il file sorgente da cui è stata letta.

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

Puoi quindi costruire a valle viste lacustre materializzate argento e oro che selezionano tra bronze.raw_orders; Fabric registra la dipendenza e la aggiorna in ordine. Per tracciare i file attraverso la pipeline, vedi Manage Fabric materialized lake views lineage.

Filtrare, trasformare e validare i file durante l'ingestione

Usa un AS SELECT senza clausola FROM per selezionare colonne, filtrare righe, convertire i valori, aggiungere colonne calcolate, aggregare i dati o applicare funzioni finestra. I vincoli di ingestione dei file si applicano all'output proiettato, quindi un vincolo può fare riferimento a un alias calcolato.

Il seguente esempio cattura righe malformate, applica una regola di qualità dei dati a livello riga, filtra l'input e partiziona l'output materializzato:

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;

Interroga le righe catturate per ispezione o bonifica:

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

Puoi anche creare risultati aggregati o materializzati a finestre direttamente dai file:

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;

Le espressioni supportate includono le funzioni standard di aritmetica SQL di Spark, aggregazione, statistiche, finestre e di classifica.

Ingerire una singola file

Imposta path su un file CSV o Parquet invece che su una cartella. Una sorgente a singolo file utilizza FULL la semantica di aggiornamento, quindi sostituire il file sostituisce il risultato materializzato.

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

Annotazioni

Quando usi FIXED schema e la cartella sorgente contiene più file con schemi diversi al momento dell'iniziale CREATE, la vista fallisce perché non riesce a riconciliare uno schema fisso. Indirizza FIXED a file che condividono uno schema, oppure usa DYNAMIC. Questa è una restrizione nota, simile al comportamento dello schema fisso nelle trasformazioni scorciatoie.

Importante

I percorsi di origine che contengono uno spazio non elaborato o %20 non sono attualmente accettati. Puoi usare una scorciatoia di cartelle OneLake come sorgente: la creazione assorbe i file disponibili alla radice del collegamento e nelle cartelle annidate. L'aggiornamento gestito scopre nuovi file aggiunti alla radice della scorciatoia, ma non scopre ricorsivamente nuovi file aggiunti sotto cartelle di scorciatoie annidate.

Suggerimento

Per rielaborare l'intera cartella sorgente su richiesta, esegui REFRESH MATERIALIZED LAKE VIEW <name> FULL;. Come per le viste basate su tabelle, non orchestrare aggiornamenti continui da un taccuino — usa Lineage e Scheduled refresh per prelevare automaticamente nuovi file.

Ottieni un elenco di viste materializzate del lago

Per ottenere l'elenco di tutte le viste lake materializzate in uno schema, usare la sintassi seguente:

SHOW MATERIALIZED LAKE VIEWS <IN/FROM> Schema_Name;

Ad esempio, per elencare tutte le viste lake materializzate nello silver schema:

SHOW MATERIALIZED LAKE VIEWS IN silver;

Recupera l'istruzione che ha creato una vista materializzata del lago

Per ottenere l'istruzione CREATE per una vista del lago materializzata, utilizzare la sintassi seguente:

SHOW CREATE MATERIALIZED LAKE VIEW MLV_Identifier;

Ad esempio, per recuperare la definizione di products_with_sales:

SHOW CREATE MATERIALIZED LAKE VIEW products_with_sales;

Aggiornare una vista materializzata del lake

Per modificare la definizione di una vista lake materializzata, ad esempio query SELECT , vincoli o partizionamento, usare il comando CREATE OR REPLACE . In alternativa, è possibile eliminare la visualizzazione esistente e ricrearla.

Rinomina una vista materializzata del lake

Per rinominare una vista materializzata del lake esistente, utilizzare il comando ALTER MATERIALIZED LAKE VIEW. La sintassi è:

ALTER MATERIALIZED LAKE VIEW MLV_Identifier RENAME TO MLV_Identifier_New;

Ad esempio, per rinominare products_with_sales:

ALTER MATERIALIZED LAKE VIEW products_with_sales RENAME TO products_with_sales_v2;

Annotazioni

Il ALTER MATERIALIZED LAKE VIEW comando è supportato solo per la ridenominazione. Per modificare la definizione o altre proprietà, come la query SELECT, i vincoli o il partizionamento, vedere Aggiornare una vista lake materializzata.

Eliminare una vista lake materializzata

È possibile eliminare una vista materializzata del lake usando l'opzione Elimina in Esplora oggetti del lakehouse o eseguendo un comando DROP. La sintassi è:

DROP MATERIALIZED LAKE VIEW MLV_Identifier;

Ad esempio, per eliminare products_with_sales:

DROP MATERIALIZED LAKE VIEW products_with_sales;

Annotazioni

L'eliminazione o la ridenominazione di una vista materializzata del lago influisce sulla vista di origine e sull'aggiornamento pianificato. Assicurarsi di aggiornare il riferimento in tutte le viste lake materializzate dipendenti.

Limitazioni correnti

Le seguenti limitazioni si applicano alle istruzioni Spark SQL per le viste lake materializzate:

  • Nomi di schema: i nomi di schema in maiuscolo (ad esempio, MYSCHEMA) non sono supportati. Usare lettere miste o tutte minuscole.
  • Nessuna istruzione DML (Data Manipulation Language): non è possibile eseguire istruzioni INSERT, UPDATE o DELETE su una vista di lago materializzata. I dati vengono popolati solo dalla SELECT query nella definizione.
  • Nessuna query di spostamento temporale: la SELECT query in una definizione di vista lake materializzata non può usare la sintassi di spostamento temporale delta Lake , ad esempio VERSION AS OF o TIMESTAMP AS OF.
  • Nessuna funzione definita dall'utente — le funzioni definite dall'utente non sono supportate nella query che definisce una vista materializzata del lake.
  • Nessuna vista temporanea come origini — la SELECT query può fare riferimento a tabelle e altre viste del lago materializzate, ma non viste temporanee.
  • Proprietà Spark a livello di sessione: le proprietà di configurazione spark impostate a livello di sessione (ad esempio , spark.conf.set(...)) non vengono applicate durante un aggiornamento pianificato. Impostare invece le proprietà a livello di lakehouse o area di lavoro.
  • Importazione file — Le viste per l’importazione di file supportano solo CSV e Parquet. Una FIXEDvista -schema fallisce se la cartella sorgente contiene file con schemi diversi al momento della creazione. I percorsi sorgente non possono contenere spazi. I collegamenti alle cartelle di OneLake sono supportati come origini, ma l'aggiornamento gestito non rileva in modo ricorsivo i file aggiunti nelle cartelle di collegamento annidate.