Partage via


Utiliser des vues matérialisées dans Databricks SQL

Important

Cette fonctionnalité est disponible en préversion publique.

Cet article explique comment créer et utiliser des vues matérialisées dans Databricks SQL pour améliorer les performances et réduire le coût de vos charges de travail de traitement et d’analyse des données.

Qu’est-ce qu’une vue matérialisée ?

Dans Databricks SQL, les vues matérialisées sont des tables managées Unity Catalog qui permettent aux utilisateurs de précalculer les résultats en fonction de la dernière version des données dans les tables sources. Les vues matérialisées sur Azure Databricks diffèrent des autres implémentations, car les résultats retournés reflètent l’état des données au moment de la dernière actualisation de la vue matérialisée au lieu de toujours mettre à jour les résultats lorsque la vue matérialisée est interrogée. Vous pouvez actualiser manuellement les vues matérialisées ou planifier des actualisations.

Les vues matérialisées sont puissantes pour les charges de travail de traitement des données telles que le traitement ETL (extraction, transformation et chargement). Les vues matérialisées fournissent un moyen simple et déclaratif de traiter les données à des fins de conformité, de correction, d’agrégation ou de capture des changements de données (CDC). Les vues matérialisées réduisent les coûts et améliorent la latence des requêtes en précalculant les requêtes lentes et les calculs fréquemment utilisés. Les vues matérialisées rendent également les transformations simples à utiliser en nettoyant, enrichissant et dénormalisant les tables de base. Les vues matérialisées peuvent réduire les coûts tout en offrant une expérience utilisateur final simplifiée, car dans certains cas elles peuvent calculer de manière incrémentielle les modifications à partir des tables de base.

Les vues matérialisées ont été initialement prises en charge sur la plateforme Data Intelligence de Databricks avec le lancement de Delta Live Tables. Lorsque vous créez une vue matérialisée dans un entrepôt Databricks SQL, un pipeline Delta Live Tables est créé pour traiter les actualisations de la vue matérialisée. Vous pouvez superviser l’état des opérations d’actualisation dans l’interface utilisateur Delta Live Tables, l’API Delta Live Tables ou l’interface CLI Delta Live Tables. Consultez Afficher l’état d’une actualisation de vue matérialisée.

Exigences

  • Vous devez utiliser un entrepôt Databricks SQL compatible avec Unity Catalog pour créer et actualiser des affichages matérialisés.

  • Votre espace de travail doit se trouver dans une région qui prend en charge les entrepôts SQL serverless.

Pour en savoir plus sur les restrictions lors de l’utilisation de vues matérialisées avec Databricks SQL, consultez Limitations.

Créer une vue matérialisée

Pour créer une vue matérialisée, utilisez l’instruction CREATE MATERIALIZED VIEW. Consultez CREATE MATERIALIZED VIEW dans la référence Databricks SQL. Pour soumettre une instruction de création, utilisez l’éditeur SQL dans l’interface utilisateur Azure Databricks, l’interface CLI Databricks SQL ou l’API Databricks SQL.

Remarque

L’utilisateur qui crée une vue matérialisée en est le propriétaire, et il doit disposer des autorisations suivantes :

  • Privilège SELECT sur les tables de base référencées par la vue matérialisée
  • Privilèges USE CATALOG et USE SCHEMA sur le catalogue et le schéma contenant les tables sources pour la vue matérialisée
  • Privilèges USE CATALOG et USE SCHEMA sur le catalogue cible et le schéma pour la vue matérialisée
  • Privilèges CREATE TABLE et CREATE MATERIALIZED VIEW sur le schéma contenant la vue matérialisée

L’exemple suivant crée la vue matérialisée mv1 à partir de la table de base base_table1 :

CREATE MATERIALIZED VIEW mv1
AS SELECT
  date, sum(sales) AS sum_of_sales
FROM
  table1
GROUP BY
  date;

Comment les vues matérialisées sont-elles créées ?

Les opérations CREATE de vue matérialisée Databricks SQL utilisent un entrepôt Databricks SQL pour créer et charger des données dans la vue matérialisée. Étant donné que la création d’une vue matérialisée est une opération synchrone dans l’entrepôt Databricks SQL, la commande CREATE MATERIALIZED VIEW se bloque jusqu’à ce que la vue matérialisée soit créée et que le chargement initial des données soit terminé. Un pipeline Delta Live Tables est créé automatiquement pour chaque vue matérialisée Databricks SQL. Lorsque la vue matérialisée est actualisée, une mise à jour du pipeline Delta Live Tables est démarrée pour traiter l’actualisation.

Charger des données à partir de systèmes externes

Databricks recommande de charger des données externes à l’aide de Lakehouse Federation pour les sources de données prises en charge. Pour plus d’informations sur le chargement de données à partir de sources non prises en charge par Lakehouse Federation, consultez Options de format de données.

Actualiser une vue matérialisée

L’opération REFRESH actualise la vue matérialisée de façon à refléter les dernières modifications apportées à la table de base. Pour actualiser une vue matérialisée, utilisez l’instruction REFRESH MATERIALIZED VIEW. Consultez REFRESH (MATERIALIZED VIEW et STREAMING TABLE) dans la référence Databricks SQL. Pour soumettre une instruction d’actualisation, utilisez l’éditeur SQL dans l’interface utilisateur Azure Databricks, l’interface CLI Databricks SQL ou l’API Databricks SQL.

Seul le propriétaire peut REFRESH la vue matérialisée.

L’exemple suivant actualise la vue matérialisée mv1 :

REFRESH MATERIALIZED VIEW mv1;

Comment les vues matérialisées Databricks SQL sont-elles actualisées ?

Les vues matérialisées créent et utilisent automatiquement des pipelines Delta Live Tables pour traiter les opérations d’actualisation. L’actualisation étant gérée par un pipeline Delta Live Tables, l’entrepôt Databricks SQL utilisé pour créer la vue matérialisée n’est pas utilisé et n’a pas besoin d’être en cours d’exécution pendant l’opération d’actualisation.

Les pipelines Delta Live Tables utilisent un mode d’exécution continue ou déclenchée. Les vues matérialisées peuvent être mises à jour dans l’un des deux modes d’exécution. Pour éviter tout traitement inutile lorsque le mode d’exécution continue est activé, les pipelines surveillent automatiquement les tables Delta dépendantes et effectuent une mise à jour uniquement lorsque le contenu de ces tables dépendantes change. Consultez Qu’est-ce qu’un pipeline Delta Live Tables ?.

Remarque

Le runtime Delta Live Tables ne peut pas détecter les modifications dans les sources de données non-Delta. La table est toujours mise à jour régulièrement, mais avec un intervalle de déclenchement par défaut plus long afin d’éviter qu’un recalcul excessif ne ralentisse tout traitement incrémentiel se déroulant lors du calcul.

Par défaut, les opérations d’actualisation sont effectuées de manière synchrone. Vous pouvez également définir une opération d’actualisation asynchrone. Le comportement associé à chaque approche est le suivant :

  • Synchrone : Une actualisation synchrone bloque les autres opérations tant que l’opération d’actualisation n’est pas terminée. Cela vous permet de séquencer les opérations d’actualisation dans un outil d’orchestration, comme les workflows. Pour orchestrer des vues matérialisées avec des workflows, utilisez le type de tâche SQL. Voir Introduction aux workflows Azure Databricks.
  • Asynchrone : Une actualisation asynchrone commence un travail en arrière-plan sur le calcul Delta Live Tables lorsqu’une actualisation de vue matérialisée démarre, et la commande retourne le résultat avant la fin du chargement des données. Étant donné qu’un pipeline Delta Live Tables gère l’actualisation, l’entrepôt SQL Databricks utilisé pour créer la vue matérialisée n’est pas utilisé. Il n’a pas besoin d’être en cours d’exécution pendant l’opération d’actualisation.

Certaines requêtes peuvent être actualisées de manière incrémentielle. Consultez Opérations d’actualisation pour obtenir des vues matérialisées. Si une actualisation incrémentielle ne peut pas être effectuée, une actualisation complète est effectuée à la place.

Planifier les actualisations de vue matérialisée

Vous pouvez configurer une vue matérialisée Databricks SQL de façon à être actualisée automatiquement en fonction d’une planification définie. Configurez cette planification avec la clause SCHEDULE lorsque vous créez la vue matérialisée, ou ajoutez une planification avec l’instruction ALTER VIEW. Lorsqu’une planification est créée, un nouveau travail Databricks est automatiquement configuré pour traiter la mise à jour. Vous pouvez afficher la planification à tout moment avec l’instruction DESCRIBE EXTENDED.

Mettre à jour la définition d’une vue matérialisée

Pour mettre à jour la définition d’une vue matérialisée, vous devez d’abord supprimer la vue matérialisée, puis la recréer.

Supprimer une vue matérialisée

Remarque

Pour soumettre la commande de suppression d’une vue matérialisée, vous devez être le propriétaire de cette vue matérialisée.

Pour supprimer une vue matérialisée, utilisez l’instruction DROP VIEW. Pour soumettre une instruction DROP, vous pouvez utiliser l’éditeur SQL dans l’interface utilisateur Azure Databricks, l’interface CLI Databricks SQL ou l’API SQL Databricks. L’exemple suivant supprime la vue matérialisée mv1 :

DROP MATERIALIZED VIEW mv1;

Décrire une vue matérialisée

Pour récupérer les colonnes et les types de données d’une vue matérialisée, utilisez l’instruction DESCRIBE. Pour récupérer les colonnes, les types de données et les métadonnées telles que le propriétaire, l’emplacement, l’heure de création et l’état d’actualisation d’une vue matérialisée, utilisez DESCRIBE EXTENDED. Pour soumettre une instruction DESCRIBE, utilisez l’éditeur SQL dans l’interface utilisateur Azure Databricks, l’interface CLI Databricks SQL ou l’API Databricks SQL.

Afficher l’état d’une actualisation de vue matérialisée

Remarque

Étant donné qu’un pipeline Delta Live Tables gère les actualisations de vue matérialisée, il y a une latence engendrée par le temps de démarrage du pipeline. Cette durée peut être de l’ordre de quelques secondes à quelques minutes, en plus du temps nécessaire pour effectuer l’actualisation.

Vous pouvez afficher l’état d’une actualisation de vue matérialisée en affichant le pipeline qui gère la vue matérialisée dans l’interface utilisateur Delta Live Tables ou en affichant les informations d’actualisation retournées par la commande DESCRIBE EXTENDED pour la vue matérialisée.

Vous pouvez également afficher l’historique d’actualisation d’une vue matérialisée en interrogeant le journal des événements Delta Live Tables. Consultez Afficher l’historique d’actualisation pour une vue matérialisée.

Afficher l’état d’actualisation dans l’interface utilisateur de Delta Live Tables

Par défaut, le pipeline Delta Live Tables qui gère une vue matérialisée n’est pas visible dans l’interface utilisateur de Delta Live Tables. Pour afficher le pipeline dans l’interface utilisateur de Delta Live Tables, vous devez accéder directement au lien vers la page Pipeline details du pipeline. Pour accéder au lien :

  • Si vous soumettez la commande REFRESH dans l’éditeur SQL, suivez le lien dans le panneau Results.
  • Suivez le lien retourné par l’instruction DESCRIBE EXTENDED.
  • Sous l’onglet de traçabilité de la vue matérialisée, cliquez sur Pipelines, puis sur le lien du pipeline.

Arrêter une actualisation active

Pour arrêter une actualisation active dans l’interface utilisateur de Delta Live Tables, dans la page Pipeline details, cliquez sur Stop pour arrêter la mise à jour du pipeline. Vous pouvez également arrêter l’actualisation avec l’interface CLI Databricks ou l’opération POST /api/2.0/pipelines/{pipeline_id}/stop dans l’API Pipelines.

Modifier le propriétaire d’une vue matérialisée

Vous pouvez modifier le propriétaire d’une vue matérialisée si vous êtes à la fois un administrateur de metastore et un administrateur d’espace de travail. Les vues matérialisées créent automatiquement et utilisent des pipelines Delta Live Tables pour traiter les modifications. Pour modifier un propriétaire de vues matérialisé, procédez comme suit :

  • Cliquez sur Icône Travaux Flux de travail, puis sur l’onglet Delta Live Tables.
  • Cliquez sur le nom du pipeline dont vous souhaitez modifier le propriétaire.
  • Cliquez sur le menu kebab menu Kebab à droite du nom du pipeline, puis sur Autorisations. La boîte de dialogue autorisations s’ouvre.
  • Cliquez sur x à la droite du nom du propriétaire actuel pour supprimer le propriétaire actuel.
  • Commencez à saisir pour filtrer la liste des utilisateurs disponibles. Cliquez sur l’utilisateur à désigner comme nouveau propriétaire du pipeline.
  • Cliquez sur Enregistrer pour enregistrer vos modifications et fermer la boîte de dialogue.

Toutes les ressources du pipeline, y compris les vues matérialisées définies dans le pipeline, appartiennent au nouveau propriétaire du pipeline. Toutes les futures mises à jour sont exécutées à l’aide de l’identité du nouveau propriétaire.

Contrôler l’accès aux vues matérialisées

Les vues matérialisées prennent en charge des contrôles d’accès enrichis afin de prendre en charge le partage de données tout en évitant d’exposer des données potentiellement privées. Un propriétaire de vue matérialisée peut accorder des privilèges SELECT à d’autres utilisateurs. Les utilisateurs disposant de l’accès SELECT à la vue matérialisée n’ont pas besoin de l’accès SELECT aux tables référencées par la vue matérialisée. Ce contrôle d’accès permet le partage de données tout en contrôlant l’accès aux données sous-jacentes.

Accorder des privilèges à une vue matérialisée

Pour accorder l’accès à une vue matérialisée, utilisez l’instruction GRANT :

GRANT
  privilege_type [, privilege_type ] ...
  ON <mv_name> TO principal;

Le privilege_type peut être :

  • SELECT : l’utilisateur peut SELECT la vue matérialisée.
  • REFRESH : l’utilisateur peut REFRESH la vue matérialisée. Les actualisations sont exécutées conformément aux autorisations du propriétaire.

L’exemple suivant crée une vue matérialisée et accorde des privilèges de sélection et d’actualisation à un utilisateur :

CREATE MATERIALIZED VIEW <mv_name> AS SELECT * FROM <base_table>;
GRANT SELECT ON <mv_name> TO user;
GRANT REFRESH ON <mv_name> TO user;

Révoquer des privilèges d’accès à une vue matérialisée

Pour révoquer l’accès à une vue matérialisée, utilisez l’instruction REVOKE :

REVOKE
  privilege_type [, privilege_type ]
  ON <name> FROM principal;

Lorsque des privilèges SELECT sur une table de base sont révoqués pour le propriétaire de la vue matérialisée ou tout autre utilisateur disposant de privilèges SELECT sur la vue matérialisée, ou lorsque la table de base est supprimée, le propriétaire de la vue matérialisée ou l’utilisateur disposant d’un accès est toujours en mesure d’interroger la vue matérialisée. Toutefois, le comportement suivant se produit :

  • Le propriétaire de la vue matérialisée ou toute autre personne ayant perdu l’accès à une vue matérialisée ne peut plus REFRESH cette vue matérialisée, et la vue matérialisée deviendra obsolète.
  • En cas d’automatisation avec une planification, l’opération REFRESH suivante échoue ou n’est pas exécutée.

L’exemple suivant révoque le privilège SELECT pour mv1 :

REVOKE SELECT ON mv1 FROM user1;

Activer le flux des changements de données

Un flux de données modifiées est requis sur les tables de base des vues matérialisées, exception faite de certains cas d’utilisation avancés. Pour activer le flux des changements de données sur une table de base, définissez la propriété de table delta.enableChangeDataFeed en utilisant la syntaxe suivante :

ALTER TABLE table1 SET TBLPROPERTIES (delta.enableChangeDataFeed = true);

Afficher l’historique d’actualisation pour une vue matérialisée

Pour afficher l’état des opérations REFRESH sur une vue matérialisée, y compris les actualisations actuelles et passées, interrogez le journal des événements Delta Live Tables :

SELECT
  *
FROM
  event_log(TABLE(<fully-qualified-table-name>))
WHERE
  event_type = "update_progress"
ORDER BY
  timestamp desc;

Remplacez <fully-qualified-table-name> par le nom complet de la vue matérialisée, incluant le catalogue et le schéma.

Consultez Qu’est-ce que le journal des événements Delta Live Tables ?.

Déterminer si une actualisation incrémentielle ou complète est utilisée

Pour optimiser les performances des actualisations de vues matérialisées, Azure Databricks utilise un modèle de coût afin de sélectionner la technique adoptée pour l’actualisation. Le tableau suivant décrit ces techniques :

Technique Actualisation incrémentielle ? Description
FULL_RECOMPUTE Non La vue matérialisée a été entièrement recalculée
NO_OP Non applicable La vue matérialisée n’a pas été mise à jour, car aucune modification de la table de base n’a été détectée.
ROW_BASED ou PARTITION_OVERWRITE Oui La vue matérialisée a été actualisée de manière incrémentielle à l’aide de la technique spécifiée.

Pour déterminer la technique utilisée, interrogez le journal des événements Delta Live Tables où event_type est planning_information :

SELECT
  timestamp,
  message
FROM
  event_log(TABLE(<fully-qualified-table-name>))
WHERE
  event_type = 'planning_information'
ORDER BY
  timestamp desc;

Remplacez <fully-qualified-table-name> par le nom complet de la vue matérialisée, incluant le catalogue et le schéma.

Consultez Qu’est-ce que le journal des événements Delta Live Tables ?.

Limitations

  • Il existe des restrictions quant à la façon dont les vues matérialisées peuvent être gérées et à l’emplacement où elles peuvent être interrogées :

    • Les vues matérialisées Databricks SQL peuvent uniquement être créées et actualisées dans les entrepôts SQL professionnels et les entrepôts SQL serverless.
    • Vous ne pouvez actualiser un affichage matérialisé SQL Databricks qu’à partir de l’espace de travail qui l’a créé.
    • Le propriétaire d’une vue matérialisée Databricks SQL peut interroger la vue matérialisée à partir d’un cluster en mode d’accès utilisateur unique. Sinon, les vues matérialisées Databricks SQL ne peuvent être interrogées qu’à partir d’entrepôts Databricks SQL, de Delta Live Tables et de clusters partagés exécutant Databricks Runtime 11.3 ou version ultérieure.
  • Les vues matérialisées ne prennent pas en charge les colonnes d’identité ou les clés de substitution.

  • Si une vue matérialisée utilise un agrégat de somme sur une colonne compatible avec les valeurs NULL, et que seules des valeurs NULL restent dans cette colonne, la valeur d’agrégation résultante de la vue matérialisée est zéro plutôt que NULL.

  • Vous ne pouvez pas lire un flux de modification de données à partir d’une vue matérialisée.

  • Les fichiers sous-jacents prenant en charge les vues matérialisées peuvent inclure des données provenant de tables en amont (y compris d’éventuelles informations d’identification personnelle) qui n’apparaissent pas dans la définition de la vue matérialisée. Ces données sont automatiquement ajoutées au stockage sous-jacent pour prendre en charge l’actualisation incrémentielle des vues matérialisées. Étant donné que les fichiers sous-jacents d’une vue matérialisée peuvent risquer d’exposer des données provenant de tables en amont qui ne font pas partie du schéma de vue matérialisée, Databricks recommande de ne pas partager le stockage sous-jacent avec des consommateurs en aval non approuvés. Par exemple, supposez que la définition d’une vue matérialisée inclut une clause COUNT(DISTINCT field_a). Même si la définition de vue matérialisée inclut uniquement la clause d’agrégation COUNT DISTINCT, les fichiers sous-jacents contiennent une liste des valeurs réelles de field_a.

  • Les vues matérialisées Databricks SQL ne sont pas prises en charge dans les régions USA Centre Sud et USA Ouest 2.