Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Chaque fois qu’une actualisation planifiée s’exécute pour vos vues matérialisées de lac, Fabric détermine la meilleure stratégie à utiliser, sans actualisation, incrémentielle ou complète, en fonction de ce qui a changé dans les données sources. Ce comportement est appelé actualisation optimale et vous aide à maintenir vos vues matérialisées de lac à jour tout en réduisant les coûts de calcul et l’heure d’actualisation.
Cet article explique comment une actualisation optimale fonctionne, ce que fait chaque stratégie et comment basculer en mode d’actualisation complète si nécessaire.
Remarque
L’actualisation optimale n’est pas prise en charge dans les scénarios suivants :
- Définitions PySpark : l’actualisation optimale s’applique uniquement aux MLV définis avec Spark SQL. Les MLV définis par PySpark utilisent toujours l’actualisation complète.
- Tables sources non-Delta: Les vues de lacs matérialisées qui utilisent des tables non-Delta comme source effectuent toujours une actualisation complète. Les stratégies incrémentielles et sans actualisation nécessitent des sources de table Delta.
Avantages de l’actualisation optimale
En analysant les validations delta sur les tables sources, une actualisation optimale peut prendre des décisions intelligentes sur la façon de traiter vos données. Dans la situation possible, cela peut entraîner :
- Coût inférieur : moins de calcul et de stockage sont utilisés lorsque Fabric détecte que les données sources ne changent pas et ignorent entièrement l’actualisation. Aucun frais supplémentaire ne s’applique à une actualisation optimale : vous êtes facturé en fonction de l’utilisation du calcul pendant les opérations d’actualisation.
- Amélioration de l’efficacité : cycles d’actualisation plus rapides lorsque seules les données modifiées doivent être traitées, ce qui vous aide à fournir des insights plus frais.
- Économies de temps : durée d’actualisation réduite lorsque le traitement incrémentiel est appliqué au lieu de recomputer le jeu de données complet.
Stratégies d’actualisation optimales
Le tableau suivant décrit les stratégies d’actualisation que l’actualisation optimale peut sélectionner :
| Stratégie d’actualisation | Descriptif |
|---|---|
| Aucune actualisation | Si aucune nouvelle validation delta n’est détectée sur les tables sources, Fabric ignore entièrement l’actualisation, évitant ainsi le calcul inutile. |
| Actualisation incrémentielle | Traite uniquement les données modifiées lorsque de nouvelles validations delta sont détectées sur les tables sources. |
| Actualisation complète | Recompute l’ensemble de la vue matérialisée du lac à partir du jeu de données source complet. Cette stratégie est utilisée lorsque des expressions non prises en charge sont détectées, lorsque les modifications ne peuvent pas être traitées de manière incrémentielle, ou lorsque le jeu de données source est suffisamment petit pour qu’un récompute complet soit plus rapide que le traitement incrémentiel. |
Important
L’actualisation incrémentielle s’applique uniquement lorsque les deux éléments suivants sont vrais :
- Les données sources sont ajoutées uniquement pour le cycle d’actualisation. Si un cycle d’actualisation détecte les suppressions ou les mises à jour d’une table source, le moteur revient à une actualisation complète, même quand CDF est activé et que la requête utilise uniquement les constructions SQL prises en charge. Pour plus d’informations, consultez Les données d’actualisation incrémentielle et d’ajout uniquement.
-
Le flux de données de modification delta (CDF) est activé (
delta.enableChangeDataFeed=true) sur toutes les tables sources référencées dans la définition matérialisée de la vue lake. Sans CDF, l’actualisation optimale ne peut choisir qu’entre aucune actualisation et actualisation complète. Pour plus d’informations, consultez Activer l’actualisation incrémentielle.
Configurer une actualisation optimale
L'option de basculement d'actualisation optimale vous offre des stratégies sans actualisation et avec actualisation complète sans paramétrage supplémentaire. Pour déverrouiller la stratégie d’actualisation incrémentielle, vous devez également activer le flux de données modifiées sur vos tables sources.
Activer le mode d’actualisation optimal
Par défaut, le mode d'actualisation optimal est activé pour le linéage d'une vue matérialisée du lac. S’il n’est pas activé, procédez comme suit pour l’activer :
Accédez à votre lakehouse et sélectionnez Les vues matérialisées du lac.
Sélectionnez Gérer, puis sélectionnez le bouton bascule d’actualisation optimale pour l’activer.
Actualisation incrémentielle et données en ajout uniquement
Aujourd’hui, l’actualisation incrémentielle s’applique uniquement lorsque les données sources sont ajoutées uniquement entre les actualisations. Si une table source enregistre une suppression ou une mise à jour, Fabric revient à une actualisation complète, même avec CDF activé et une requête qui utilise uniquement constructions SQL prises en charge.
Le moteur a besoin d’un moyen fiable d’identifier les lignes supprimées. Pour améliorer l’efficacité, les utilisateurs peuvent désormais fournir des indicateurs d’actualisation. Nous testons actuellement cela avec certains clients.
Activer l’actualisation incrémentielle
Pour utiliser l’actualisation incrémentielle, vous devez activer la propriété de flux de données de modification delta (CDF) sur toutes les tables sources ou vues de lac matérialisées référencées dans la définition de vue de lac matérialisée. CDF permet à Fabric de lire uniquement les lignes qui ont changé depuis la dernière actualisation, au lieu de retraiter le jeu de données complet.
Sans CDF activé, l’actualisation optimale peut uniquement choisir entre aucune actualisation et actualisation complète.
Tip
Pour vous aider à identifier les opportunités d’optimisation de l’actualisation, Fabric affiche une bannière qui répertorie les vues de lac matérialisées éligibles à l’actualisation incrémentielle, mais bloquées, car la fonctionnalité CDF n’est pas activée sur une ou plusieurs tables sources. La bannière s’affiche dans la vue de lignage, dans les détails des exécutions récentes et au niveau de chaque nœud, afin que vous puissiez repérer l’écart quel que soit le point d’entrée utilisé.
Pour activer le CDF directement à partir de la bannière :
Dans la bannière, sélectionnez Activer CDF.
Dans la boîte de dialogue Activer le flux de données modifiées, examinez la liste des vues matérialisées du lac et des tables sources pour lesquelles CDF sera activé.
Sélectionnez Activer. Le prochain rafraîchissement reflète le statut CDF mis à jour.
Remarque
L’activation de CDF sur vos tables sources n’a aucun effet mesurable sur le stockage ou les performances pour les charges de travail d’ajout uniquement, ce qui est le scénario pris en charge par l’actualisation incrémentielle. CDF est une propriété standard des tables Delta Lake dont peuvent également profiter d’autres fonctionnalités de Fabric. Pour plus d’informations sur le fonctionnement de CDF, consultez Utiliser le flux de données de modification Delta Lake.
Vous pouvez activer le CDF au moment de la création en incluant TBLPROPERTIES dans l’instruction CREATE :
CREATE OR REPLACE MATERIALIZED LAKE VIEW silver.cleaned_order_data
TBLPROPERTIES (delta.enableChangeDataFeed=true)
AS
SELECT
o.order_id,
o.order_date,
o.product_id,
p.product_name,
o.quantity,
p.price,
o.quantity * p.price AS revenue
FROM bronze.orders o
INNER JOIN bronze.products p
ON o.product_id = p.product_id
Pour les tables sources existantes, utilisez cette option ALTER TABLE pour activer CDF :
ALTER TABLE <table-name> SET TBLPROPERTIES (delta.enableChangeDataFeed = true);
Par exemple, pour activer CDF sur les deux tables sources à partir du guide de prise en main :
ALTER TABLE bronze.products SET TBLPROPERTIES (delta.enableChangeDataFeed = true);
ALTER TABLE bronze.orders SET TBLPROPERTIES (delta.enableChangeDataFeed = true);
Constructions SQL prises en charge par l’actualisation incrémentielle
L’actualisation incrémentielle fonctionne lorsque la définition de votre vue matérialisée de lac utilise uniquement les constructions SQL décrites ici. Si votre requête inclut des constructions non prises en charge( telles que des fonctions de fenêtre ou des fonctions non déterministes), Fabric actualise toujours vos données, mais revient à une actualisation complète.
| Élément SQL | Remarque |
|---|---|
| Expression SELECT | Les fonctions et expressions intégrées déterministes sont prises en charge. Les fonctions non déterministes telles que rand(), uuid()et current_timestamp() ne sont pas prises en charge.
DISTINCT et les fonctions de fenêtre ne sont pas prises en charge. |
| FROM | Prend en charge les tables Delta et les vues matérialisées du lac. Les sous-requêtes et les CTEs fonctionnent s’ils utilisent uniquement les clauses prises en charge. |
| WHERE | Seules les fonctions intégrées déterministes sont prises en charge. |
| JOINTURE INTERNE | Pris en charge. |
| JOINTURE EXTERNE GAUCHE / JOINTURE SÉMIGRAPHIQUE GAUCHE | Pris en charge. L’actualisation incrémentielle fonctionne uniquement si la table de droite reste inchangée pendant le cycle d’actualisation. Toute modification apportée à la table de droite déclenche une actualisation complète. |
| GROUP BY / agrégats | Pris en charge. L’utilisation des agrégats (AVG(), STDDEV(), et autres) exige que chaque table source soit partitionnée et que cette colonne de partition soit incluse dans la GROUP BY clause de la requête MLV – cette exigence permet à Fabric de recalculer progressivement uniquement les partitions affectées. SUM(), MIN(), MAX(), et COUNT() (sans DISTINCT) sont un cas particulier : ils supportent le rafraîchissement incrémental sans l’obligation de partitionnement. Mélanger d’autres fonctions agrégées avec SUM(), COUNT(), MIN(), et MAX() dans la même requête (par exemple, SELECT SUM(amount), AVG(price) ...) nécessite la condition de partitionnement pour toute la requête ; sinon, Fabric revient à un rafraîchissement complet.
GROUP BY colonnes doivent apparaître dans SELECT liste. |
| UNION ALL | Pris en charge. |
| WITH | Expressions de table courantes (CTE) si elles utilisent uniquement des clauses supportées. |
| Sous-requêtes dans les expressions | Les sous-requêtes au sein des expressions SELECT ou WHERE (telles que les sous-requêtes scalaires ou EXISTS) déclenchent une actualisation complète si une table référencée a des modifications. |
| Contraintes de qualité des données | Seules les fonctions intégrées déterministes sont prises en charge dans les contraintes. |
Remarque
L’utilisation de constructions non prises en charge n’empêche pas de créer une vue matérialisée du lac. Cela signifie uniquement que Fabric utilise une actualisation complète au lieu d’une actualisation incrémentielle.
Actualisation complète
L’actualisation optimale revient automatiquement à une actualisation complète si nécessaire, de sorte que vous n’avez pas normalement besoin de la forcer. Toutefois, il existe des cas où vous souhaiterez peut-être déclencher une actualisation complète manuellement, par exemple pour résoudre les résultats inattendus ou pour retraiter les données après une correction.
Exécuter une actualisation complète ponctuelle avec SQL
Pour forcer une actualisation complète d’une vue matérialisée spécifique, exécutez la commande suivante :
REFRESH MATERIALIZED LAKE VIEW [workspace.lakehouse.schema].MLV_Identifier FULL
Remarque
Si le nom de votre espace de travail contient des espaces, placez-le entre des guillemets inversés : `My Workspace`.lakehouse.schema.view_name
Désactiver l’actualisation optimale
Si vous souhaitez que chaque exécution planifiée effectue une actualisation complète, vous pouvez désactiver le commutateur d’actualisation optimale. Cela désactive les stratégies non actualisées et incrémentielles : chaque exécution recompute le jeu de données complet, même si aucune donnée source n’a changé.
Accédez à votre lakehouse et sélectionnez Les vues matérialisées du lac.
Cliquez sur Gérer et désactivez le commutateur d'actualisation optimale.