Référence Spark SQL pour les vues de lac matérialisées

Cet article fournit la syntaxe SQL de Spark pour créer, lister, renommer et supprimer des vues matérialisées des lacs dans Fabric.

Conseil / Astuce

Pour créer votre première vue matérialisée du lac, consultez Prise en main des vues matérialisées du lac.

Créer une vue matérialisée du lac

Vous pouvez définir une vue matérialisée de lac à partir de n’importe quelle table ou d’une autre vue matérialisée au sein d’un lakehouse.

Syntaxe

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 

Remarque

Arguments

Paramètre Descriptif
OR REPLACE Remplace toute vue matérialisée du lac existante portant le même nom. Impossible de combiner avec IF NOT EXISTS.
IF NOT EXISTS Crée la vue matérialisée du lac uniquement si elle n’existe pas déjà. L’instruction réussit sans erreur si la vue est déjà définie. Impossible de combiner avec OR REPLACE.
MLV_Identifier Nom de la vue matérialisée du lac. Peut être qualifié en tant que workspace.lakehouse.schema.name.
CONSTRAINT ... CHECK Définit une règle de qualité des données. La CHECK clause spécifie une expression booléenne que chaque ligne doit satisfaire. Vous pouvez définir plusieurs contraintes.
ON MISMATCH Action à entreprendre lorsqu’une ligne enfreint une contrainte. DROP supprime silencieusement la ligne ; FAIL arrête l’actualisation avec une erreur. La valeur par défaut est FAIL.
REFRESH_HINT Déclare une ou plusieurs colonnes qui identifient de manière unique les lignes pour un traitement incrémental des mises à jour et suppressions (aperçu).
PARTITIONED BY Colonnes permettant de partitionner la vue de lac matérialisée, ce qui peut améliorer les performances des requêtes pour les lectures filtrées.
COMMENT Description de texte libre stockée avec la définition matérialisée du lac.
TBLPROPERTIES Paires clé-valeur stockées sous forme de métadonnées sur la vue matérialisée du lac.
AS select_statement Requête SELECT qui définit les données dans la vue matérialisée du lac.

Examples

L’exemple suivant crée une vue de lac matérialisée avec une contrainte de qualité des données, un commentaire et un partitionnement. La OR REPLACE clause remplace toute vue existante portant le même nom.

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

L’exemple suivant crée une vue matérialisée de lac plus simple. La IF NOT EXISTS clause empêche une erreur si la vue existe déjà, ce qui le rend sûr pour les scripts de déploiement.

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

Conseil / Astuce

Gérer l’actualisation matérialisée de la vue du lac à partir de votre lakehouse

Après avoir créé vos vues matérialisées de lac, n’orchestrez pas leur actualisation à partir d’un bloc-notes. Utilisez plutôt les deux fonctionnalités intégrées sur la lakehouse :

  • Traçabilité : Fabric dérive l’ordre de dépendance entre vos vues matérialisées de lac à partir de leurs définitions. Pour ouvrir la vue de traçabilité, sélectionnez l’onglet Vues matérialisées du lac dans le ruban, puis sélectionnez Gérer. À partir de là, vous pouvez suivre une exécution en cours et inspecter les dépendances en amont et en aval pour chaque vue.
  • Actualisation planifiée : à partir de la même vue Gérer , créez une ou plusieurs planifications pour actualiser toutes les vues matérialisées du lac ou un sous-ensemble sélectionné. Chaque planification s’exécute indépendamment et actualise les vues dans l’ordre des dépendances, de sorte que les vues en aval lisent toujours les données actualisées à partir de leurs vues en amont. Fabric réessaie les échecs temporaires pour vous.

Utilisez des notebooks pour élaborer et faire évoluer les définitions de vos vues de lac matérialisées. Laissez le lignage des données et l’actualisation programmée gérer l’ordonnancement, l’exécution et les relances, pour des données fiables et reproductibles avec moins de code à maintenir.

Ingérer les fichiers avec USING OneLake_Files

En plus de définir une vue de lac matérialisée à partir de tables, vous pouvez en définir une qui intègre directement des fichiers CSV ou Parquet depuis OneLake. Une vue d’ingestion de fichiers utilise USING OneLake_Files pour un dossier OneLake physique, un raccourci de dossier OneLake ou un chemin vers un fichier unique. Vous pouvez facultativement utiliser une clause AS SELECT sans FROM pour filtrer, mettre en forme et agréger la source lors de son ingestion.

Le tableau suivant montre quelle syntaxe s’applique à chaque style d’auteur :

Aspect Vue matérialisée du lac sur table Vue matérialisée du lac basée sur des fichiers
Source Tables ou autres vues matérialisées sur le lac Un dossier OneLake physique, un raccourci de dossier OneLake, ou un fichier unique
Définition AS select_statement USING OneLake_Files + OPTIONS + AS SELECT facultatif sans FROM
Formats Toute table interrogable CSV, Parquet
Schéma Dérivé de la SELECT schema_mode = DYNAMIC ou FIXED
Lignée d’origine Tables/vues en amont Emplacement de la source ; projeter éventuellement la __filepath__ colonne de métadonnées source lorsque vous avez besoin de traçabilité par ligne de fichier
Couche typique Argent, or Bronze
Contraintes de qualité des données Supported Pris en charge lors de l’ingestion

Syntaxe

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

Remarque

Ne spécifiez pas de clause FROM dans l’ingestion de fichier AS SELECT. La source est déjà liée par USING OneLake_Files et l’option path .

Référence OPTIONS

Option S’applique à Descriptif
format CSV, Parquet Format de fichier source. Les valeurs prises en charge sont csv et parquet.
path CSV, Parquet Dossier physique OneLake, raccourci de dossier OneLake ou chemin ABFSS vers un fichier unique. Les fichiers disponibles dans les sous-dossiers imbriqués sont ingérés de manière récursive lors de la création de la vue. Utilisez une barre oblique pour un dossier ou ajoutez l’extension de fichier pour un seul fichier.
header CSV Indique si la première ligne de chaque fichier contient des noms de colonnes. La valeur par défaut est false.
delimiter CSV Caractère délimiteur de champs (par exemple, , ou |). La valeur par défaut est la virgule.
sep CSV Alias de delimiter.
quote CSV Caractère utilisé pour citer des valeurs.
escape CSV Caractère utilisé pour échapper à une citation à l’intérieur d’une valeur déjà indiquée.
nullValue CSV Chaîne qui représente une valeur Null.
ignoreLeadingWhiteSpace CSV S’il faut retirer les espaces de début des valeurs.
ignoreTrailingWhiteSpace CSV S’il faut retirer les espaces de fin des valeurs.
multiLine CSV Savoir si une valeur citée peut s’étendre sur plusieurs lignes. La valeur par défaut est false.
dateFormat CSV Le patron de date Java utilisé pour analyser les valeurs de date, comme MM/dd/yyyy.
timestampFormat CSV Format d’horodatage Java utilisé pour analyser des valeurs d’horodatage.
encoding CSV Codage de caractères, tels que UTF-8, ISO-8859-1, UTF-16, ou Windows-1252.
comment CSV Caractère indiquant qu’une ligne est un commentaire à ignorer.
inferSchema CSV S’il faut inférer les types de colonnes. Lorsque false, les colonnes sont lues comme des chaînes de caractères. Utilisez FIXED le mode schéma lorsque vous désactivez l’inférence.
columnNameOfCorruptRecord CSV Le nom d’une colonne de chaîne qui reçoit le texte brut pour les lignes mal formées. Les lignes valides contiennent NULL dans cette colonne. Incluez la colonne dans la sortie AS SELECT.

Important

Fabric gère la manipulation en rangées déformées. Ne définissez pas l’option Spark CSV mode.

Référence TBLPROPERTIES

Propriété Values Descriptif
schema_mode DYNAMIC (par défaut), FIXED DYNAMIC ajoute des colonnes nouvellement découvertes et écrit NULL lorsqu’un fichier ne contient pas de colonne établie. FIXED fige le schéma lors de sa création et rejette toute dérive ultérieure.
refresh_mode APPEND_ONLY, FULL, MIRROR Pour les dossiers, APPEND_ONLY ajoute des lignes de nouveaux fichiers, FULL retraite le dossier actuel en instantané, et MIRROR reflète les ajouts et suppressions de fichiers. Une source à fichier unique utilise la sémantique d’actualisation FULL.

Example

L’exemple suivant intègre un dossier de fichiers CSV avec une ligne d’en-tête dans une vue bronze. Chaque ligne reçoit également une __filepath__ colonne qui enregistre le fichier source dont elle a été lue.

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

Vous pouvez ensuite construire des vues lacustres matérialisées en argent et or en aval qui sélectionnent parmi bronze.raw_orders; Fabric enregistre la dépendance et les rafraîchit dans l’ordre. Pour suivre les fichiers tout au long du pipeline, voir Gérer la traçabilité des vues de lac matérialisées dans Fabric.

Filtrez, transformez et validez les fichiers lors de l’ingestion

Utilisez un FROM-less AS SELECT pour sélectionner les colonnes, filtrer les lignes, distribuer des valeurs, ajouter des colonnes calculées, agréger des données ou appliquer des fonctions de fenêtre. Les contraintes d’ingestion de fichiers s’exécutent sur la sortie projetée, de sorte qu’une contrainte peut référencer un alias calculé.

L’exemple suivant capture les lignes malformées, applique une règle de qualité des données au niveau des lignes, filtre l’entrée et partitionne la sortie matérialisée :

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;

Consultez les lignes capturées à des fins d’inspection ou de correction :

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

Vous pouvez également créer directement à partir de fichiers des résultats matérialisés agrégés ou par fenêtre :

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;

Les expressions prises en charge incluent l’arithmétique SQL standard de Spark, les fonctions d’agrégat, statistiques, fenêtres et de classement.

Ingérer un seul fichier

Définissez path sur un fichier au format CSV ou Parquet au lieu d’un dossier. Une source constituée d’un seul fichier utilise la sémantique d’actualisation FULL, de sorte que le remplacement du fichier remplace le résultat matérialisé.

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

Remarque

Lorsque vous utilisez FIXED un schéma et que le dossier source contient plusieurs fichiers avec différents schémas au moment de l’initial CREATE, la vue échoue car elle ne peut pas concilier un seul schéma fixe. Faites pointer les vues FIXED vers des fichiers qui partagent un même schéma, ou utilisez DYNAMIC. C’est une restriction connue, similaire au comportement des schémas fixes dans les transformations de raccourcis.

Important

Les chemins sources contenant un espace brut ou %20 ne sont pas actuellement acceptés. Vous pouvez utiliser un raccourci de dossier OneLake comme source : lors de la création, les fichiers disponibles à la racine du raccourci et dans les dossiers imbriqués sont importés. Le rafraîchissement géré détecte les nouveaux fichiers ajoutés à la racine des raccourcis, mais ne détecte pas récursivement les nouveaux fichiers ajoutés dans des dossiers raccourcis imbriqués.

Conseil / Astuce

Pour retraiter l’intégralité du dossier source à la demande, exécutez REFRESH MATERIALIZED LAKE VIEW <name> FULL;. Comme pour les vues basées sur des tableaux, ne dirigez pas un rafraîchissement continu depuis un carnet — utilisez Lineage et Scheduled refresh pour récupérer automatiquement de nouveaux fichiers.

Obtenir la liste des vues matérialisées du lac

Pour obtenir la liste de toutes les vues de lac matérialisées dans un schéma, utilisez la syntaxe suivante :

SHOW MATERIALIZED LAKE VIEWS <IN/FROM> Schema_Name;

Par exemple, pour répertorier toutes les vues matérialisées du lac dans le silver schéma :

SHOW MATERIALIZED LAKE VIEWS IN silver;

Récupérer l’instruction qui a créé une vue matérialisée du lac

Pour obtenir l’instruction CREATE d’une vue matérialisée de lac, utilisez la syntaxe suivante :

SHOW CREATE MATERIALIZED LAKE VIEW MLV_Identifier;

Par exemple, pour récupérer la définition de products_with_sales:

SHOW CREATE MATERIALIZED LAKE VIEW products_with_sales;

Mettre à jour une vue matérialisée du lac

Pour modifier la définition d’une vue matérialisée de lake (par exemple, la requête SELECT, les contraintes ou le partitionnement), utilisez la commande CREATE OR REPLACE. Vous pouvez également supprimer l’affichage existant et le recréer.

Renommer une vue de lac matérialisée

Pour renommer une vue de lac matérialisée existante, utilisez la ALTER MATERIALIZED LAKE VIEW commande. La syntaxe est la suivante :

ALTER MATERIALIZED LAKE VIEW MLV_Identifier RENAME TO MLV_Identifier_New;

Par exemple, pour renommer products_with_sales:

ALTER MATERIALIZED LAKE VIEW products_with_sales RENAME TO products_with_sales_v2;

Remarque

La commande ALTER MATERIALIZED LAKE VIEW n’est prise en charge que pour le renommage. Pour modifier la définition ou d’autres propriétés (telles que la requête, les contraintes ou le SELECT partitionnement), consultez Mettre à jour une vue matérialisée du lac.

Supprimer une vue matérialisée du lac

Vous pouvez supprimer une vue matérialisée du lac à l’aide de l’option Supprimer dans l’Explorateur d’objets lakehouse ou en exécutant une DROP commande. La syntaxe est la suivante :

DROP MATERIALIZED LAKE VIEW MLV_Identifier;

Par exemple, pour supprimer products_with_sales:

DROP MATERIALIZED LAKE VIEW products_with_sales;

Remarque

La suppression ou le changement de nom d’une vue de lac matérialisée affecte la vue de traçabilité et l’actualisation planifiée. Veillez à mettre à jour la référence dans toutes les vues matérialisées dépendantes du lac.

Limitations actuelles

Les limitations suivantes s’appliquent aux instructions Spark SQL pour les vues de lac matérialisées :

  • Noms de schémas — les noms de schémas intégralement en majuscule (par exemple, MYSCHEMA) ne sont pas pris en charge. Utilisez la casse mixte ou les minuscules.
  • Aucune instruction DML (Data Manipulation Language) : vous ne pouvez pas exécuter, INSERTou UPDATE des DELETEinstructions sur une vue matérialisée du lac. Les données sont renseignées uniquement par la SELECT requête dans la définition.
  • Aucune requête de voyage temporel : la requête dans la définition d'une vue matérialisée dans un lac Delta ne peut pas utiliser la syntaxe de time travel de Delta Lake (par exemple, SELECT ou ).
  • Aucune fonction définie par l’utilisateur : les fonctions définies par l’utilisateur ne sont pas prises en charge dans la SELECT requête qui définit une vue matérialisée du lac.
  • Pas de vues temporaires en tant que sources : la SELECT requête peut référencer des tables et d’autres vues matérialisées de lac, mais pas des vues temporaires.
  • Propriétés Spark au niveau de la session : les propriétés de configuration Spark définies au niveau de la session (par exemple) spark.conf.set(...)ne sont pas appliquées lors d’une actualisation planifiée. Définissez plutôt les propriétés au niveau du lakehouse ou de l’espace de travail.
  • Ingestion de fichiers — Les vues d’ingestion prennent uniquement en charge les formats CSV et Parquet. Une FIXEDvue -schema échoue si le dossier source contient des fichiers avec différents schémas au moment de la création. Les chemins sources ne peuvent pas contenir d’espaces. Les raccourcis de dossiers OneLake sont pris en charge comme sources, mais le rafraîchissement géré ne détecte pas récursivement les fichiers ajoutés dans des dossiers de raccourcis imbriqués.