Vues matérialisées
Comme les vues standard, les vues matérialisées sont les résultats d'une query et vous y accédez de la même manière qu'à une table. Contrairement aux vues standards, qui recalculent les résultats à chaque query, les vues matérialisées mettent en cache les résultats et les refresh à un intervalle spécifié. Comme une vue matérialisée est précalculée, les requêtes effectuées sur celle-ci peuvent s'exécuter beaucoup plus rapidement que sur des vues régulières.
Pour obtenir des conseils sur l'utilisation des vues matérialisées par rapport aux tables de streaming ou aux vues, veuillez consulter Que sont les pipelines ?.
Une vue matérialisée est un objet de pipeline déclaratif. Il inclut une query qui le définit, un flux pour le mettre à jour, et les résultats mis en cache pour un accès rapide. Une vue matérialisée :
- Suit les modifications des données en amont.
- Lors du trigger, traite de manière incrémentielle les données modifiées et applique les Transformations nécessaires.
- Maintient la table de sortie, synchronisée avec les données source, en fonction d'un intervalle de refresh spécifié.
Les vues matérialisées sont un bon choix pour de nombreuses transformations :
- Vous appliquez un raisonnement sur les résultats mis en cache plutôt que sur les lignes. En fait, vous écrivez simplement une query.
- Elles sont toujours correctes au moment de leur mise à jour. Toutes les données requises sont traitées, même si elles arrivent en retard ou dans le désordre.
- Elles sont souvent incrémentielles. Databricks essaie de choisir la stratégie appropriée qui minimise le coût de la mise à jour d'une vue matérialisée.
Comment les vues matérialisées fonctionnent
Le diagramme suivant illustre le fonctionnement des vues matérialisées.

Les vues matérialisées sont définies et mises à jour par un seul pipeline. Vous pouvez définir explicitement des vues matérialisées dans le code source du pipeline. Les tables définies par un pipeline ne peuvent pas être modifiées ou mises à jour par un autre pipeline.
Lorsque vous créez une vue matérialisée autonome, en dehors d'un LakeFlow Pipelines, Databricks crée un pipeline qui est utilisé pour mettre à jour la vue. Vous pouvez voir le pipeline en sélectionnant Jobs et pipelines dans la navigation de gauche de votre Workspace. Vous pouvez ajouter la colonne Type de pipeline à votre vue. Les vues matérialisées définies dans un pipeline ont un type de ETL. Les vues matérialisées autonomes ont un type de MV/ST. Voir Utiliser des vues matérialisées autonomes.
Databricks utilise Unity Catalog pour stocker les métadonnées concernant la vue, y compris la query et les vues système supplémentaires pour les mises à jour incrementielles. Databricks matérialise les données mises en cache dans le stockage cloud. Databricks stocke des données de support dans le catalogue __databricks_internal. Voir Le catalogue __databricks_internal.
Databricks crée des tables internes pour prendre en charge le refresh incrémentiel des vues matérialisées. Ces tables apparaissent dans system.information_schema.tables mais ne sont pas visibles dans l'Explorateur de catalogues ou d'autres interfaces utilisateur de Workspace.
L'exemple suivant joint deux tables et maintient le résultat à jour à l'aide d'une vue matérialisée.
- Python
- SQL
from pyspark import pipelines as dp
@dp.materialized_view
def regional_sales():
partners_df = spark.read.table("partners")
sales_df = spark.read.table("sales")
return (
partners_df.join(sales_df, on="partner_id", how="inner")
)
CREATE OR REPLACE MATERIALIZED VIEW regional_sales
AS SELECT *
FROM partners
INNER JOIN sales ON
partners.partner_id = sales.partner_id;
Mises à jour incrémentielles automatiques
Lorsque le pipeline définissant une vue matérialisée est Trigger, la vue est automatiquement mise à jour, souvent de manière incrémentielle. Databricks tente de traiter uniquement les données nécessaires pour maintenir la vue matérialisée à jour. Une vue matérialisée affiche toujours le résultat correct, même si elle nécessite de recalculer entièrement le résultat de la query à partir de zéro, mais souvent Databricks n'effectue que des mises à jour incrémentielles d'une vue matérialisée, ce qui peut être beaucoup moins coûteux qu'un recalcul complet.
Le diagramme ci-dessous montre une vue matérialisée appelée sales_report, qui est le résultat de la jointure de deux tables en amont appelées clean_customers et clean_transactions, et du regroupement par pays. Un processus en amont insère 200 lignes dans clean_customers dans trois pays (États-Unis, Pays-Bas, Royaume-Uni) et met à jour 5 000 lignes dans clean_transactions correspondant à ces nouveaux clients. La vue matérialisée sales_report est mise à jour de manière incrémentielle uniquement pour les pays qui ont de nouveaux clients ou des transactions correspondantes. Dans cet exemple, trois lignes sont mises à jour au lieu de l'intégralité du rapport de ventes.

Pour plus de détails sur le fonctionnement du refresh incrémentiel dans les vues matérialisées, consultez Refresh incrémentiel pour les vues matérialisées.
Limitations des vues matérialisées
Les vues matérialisées présentent les limitations suivantes :
- Puisque les mises à jour créent des requêtes correctes, certaines modifications des entrées nécessiteront un recalcul complet d'une vue matérialisée, ce qui peut être coûteux.
- Ils ne sont pas conçus pour les cas d'utilisation à faible latence. La latence de mise à jour d'une vue matérialisée est de l'ordre des secondes ou des minutes, pas des millisecondes.
- Toutes les computations ne peuvent pas être calculées de manière incrémentale.
- Databricks tente de détecter lorsqu'une UDF utilisée dans une vue matérialisée modifie son comportement et effectue une refresh complète pour appliquer l'UDF mis à jour. Cependant, les UDF qui appellent d'autres fonctions ou bibliothèques peuvent modifier le comportement d'une manière que Databricks ne reconnaît pas. Un exemple de cela est lorsqu'une bibliothèque appelée est mise à niveau. Lorsque le comportement d'une UDF change, il vous incombe de procéder à un full refresh de toute vue matérialisée qui l'utilise.
- Les vues matérialisées ne prennent pas en charge
CLONE. Vous ne pouvez pas utiliser une vue matérialisée comme source ou cible d'un clone profond ou superficiel. Pour plus d'informations, voir Limitations. - Pour afficher le pipeline qui prend en charge une vue matérialisée, un utilisateur non-administrateur a besoin du privilège
REFRESHsur la vue matérialisée, en plus des autorisations sur le pipeline. Voir Qui peut afficher un pipeline et sa sortie ?.