Vues matérialisées

Comme les vues standard, les vues matérialisées sont les résultats d’une requête et vous y accédez de la même façon qu’une table. Contrairement aux vues standard, qui recalculent les résultats à chaque requête, les vues matérialisées mettent les résultats en cache et sont actualisées selon un intervalle spécifié. Étant donné qu’un affichage matérialisé est précalculé, les requêtes sur celui-ci peuvent s’exécuter beaucoup plus rapidement que sur les affichages réguliers.

Pour obtenir des conseils sur le moment où utiliser des vues matérialisées plutôt que des tables ou des vues en continu, consultez Que sont les pipelines ?.

Une vue matérialisée est un objet de pipeline déclaratif. Il inclut une requête qui la définit, un flux de mise à jour et les résultats mis en cache pour un accès rapide. Vue matérialisée :

  • Suit les modifications apportées aux données en amont.
  • Lors de l'activation du déclencheur, traite de manière incrémentielle les données modifiées et applique les transformations nécessaires.
  • Gère la table de sortie, synchronisée avec les données sources, en fonction d’un intervalle d’actualisation 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 au lieu de lignes. En fait, vous écrivez simplement une requête.
  • Ils sont toujours corrects au moment de leur mise à jour. Toutes les données requises sont traitées, même si elles arrivent en retard ou hors commande.
  • Ils sont souvent incrémentiels. Azure Databricks tente de choisir la stratégie appropriée qui réduit le coût de la mise à jour d’une vue matérialisée.

Fonctionnement des vues matérialisées

Le diagramme suivant illustre le fonctionnement des vues matérialisées.

Diagramme montrant le fonctionnement de mvs

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.

Note

Lorsque vous créez une vue matérialisée indépendante, en dehors des pipelines déclaratifs Lakeflow Spark, Azure Databricks crée un pipeline servant à mettre à jour la vue. Vous pouvez voir le pipeline en sélectionnant Tâches & Pipelines dans le volet de navigation à gauche de votre espace de travail. Vous pouvez ajouter la colonne de type pipeline à votre affichage. Les vues matérialisées définies dans un pipeline ont un type de ETL. Les vues matérialisées indépendantes sont de type MV/ST. Consultez Utiliser des vues matérialisées autonomes.

Azure Databricks utilise le catalogue Unity pour stocker les métadonnées relatives à la vue, notamment la requête et les vues système supplémentaires pour les mises à jour incrémentielles. Azure Databricks matérialise les données mises en cache dans le stockage cloud. Azure Databricks stocke certaines données sous-jacentes dans le catalogue __databricks_internal. Consultez le __databricks_internal catalogue.

Note

Azure Databricks crée des tables internes pour prendre en charge l’actualisation incrémentielle de l’affichage matérialisé. Ces tableaux s’affichent dans system.information_schema.tables, mais ne sont pas visibles dans l’Explorateur de catalogues ou dans les autres interfaces de l'espace de travail.

L’exemple suivant joint deux tables ensemble et conserve le résultat à jour à l’aide d’une vue matérialisée.

Python

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")
  )

SQL

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 déclenché, l’affichage est automatiquement tenu à jour, souvent de façon incrémentielle. Azure Databricks tente de traiter uniquement les données qui doivent être traitées pour maintenir la vue matérialisée à jour. Une vue matérialisée affiche toujours le résultat correct, même s’il nécessite une recomputation complète du résultat de la requête à partir de zéro, mais souvent Azure Databricks effectue uniquement des mises à jour incrémentielles vers une vue matérialisée, ce qui peut être beaucoup moins coûteux qu’une recomputation complète.

Le diagramme ci-dessous montre une vue matérialisée appelée sales_report, qui est le résultat de la jonction 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 clean_customers dans trois pays (États-Unis, Pays-Bas, Royaume-Uni) et met à jour 5 000 lignes correspondant clean_transactions à ces nouveaux clients. La sales_report vue matérialisée 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 des ventes.

Exemple de mise à jour incrémentielle MV

Pour plus d’informations sur le fonctionnement de l’actualisation incrémentielle dans les vues matérialisées, consultez Actualisation incrémentielle pour les vues matérialisées.

Limitations de la vue matérialisée

Les vues matérialisées présentent les limitations suivantes :

  • Étant donné que les mises à jour créent des requêtes correctes, certaines modifications apportées aux entrées nécessitent une recomputation complète d’une vue matérialisée, ce qui peut être coûteux.
  • Ils ne sont pas conçus pour les cas d’usage à faible latence. La latence de la mise à jour d’une vue matérialisée est en secondes ou en minutes, et non en millisecondes.
  • Tous les calculs ne peuvent pas être calculés de manière incrémentielle.
  • Azure Databricks tente de détecter quand une fonction UDF utilisée dans une vue matérialisée modifie le comportement et effectue une actualisation complète pour appliquer la fonction UDF mise à jour. Toutefois, les fonctions définies par l’utilisateur qui appellent d’autres fonctions ou bibliothèques peuvent modifier le comportement d’une manière non reconnue par Azure Databricks. Par exemple, lorsqu’une bibliothèque appelée est mise à niveau. Lorsque le comportement d’une fonction UDF change, il vous incombe d’effectuer une actualisation complète sur 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, consultez Limitations.
  • Pour afficher le pipeline sous-jacent à une vue matérialisée, un utilisateur non administrateur doit disposer du privilège REFRESH sur la vue matérialisée, en plus des autorisations sur le pipeline. Voir Qui peut afficher un pipeline et sa sortie ?.

Ressources additionnelles