Utiliser des vues matérialisées dans Databricks SQL
Remarque
Si vous devez utiliser une connexion Azure Private Link avec votre vue matérialisée, contactez votre représentant Databricks.
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.
Important
Les vues matérialisées créées dans Databricks SQL sont sauvegardées par un pipeline Delta Live Tables serverless. Votre espace de travail doit prendre en charge les pipelines serverless pour utiliser cette fonctionnalité.
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 furent initialement prises en charge dans Azure 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 serverless est créé pour traiter les actualisations dans la vue matérialisée. Vous pouvez surveiller l’état des opérations d’actualisation dans l’interface utilisateur Delta Live Tables ou l’API pipelines. Consultez Afficher l’état d’une actualisation de vue matérialisée.
Exigences
Pour créer ou actualiser des vues matérialisées :
Vous devez utiliser un entrepôt SQL pro ou serverless compatible avec Unity Catalog.
Pour actualiser une vue matérialisée, vous devez être dans l’espace de travail qui l’a créée.
Votre espace de travail doit se trouver dans une région qui prend en charge les entrepôts SQL serverless.
Pour interroger des vues matérialisées :
- Vous devez être le propriétaire de la vue matérialisée, ou avoir
SELECT
sur la vue matérialisée, ainsi queUSE SCHEMA
etUSE CATALOG
sur ses parents. - Vous devez utiliser l’une des ressources de calcul suivantes :
- Entrepôt SQL
- Interfaces Delta Live Tables
- Calcul en mode d’accès partagé
- Mode d’accès utilisateur unique sur Databricks Runtime 15.4 et versions ultérieures, tant que l’espace de travail est activé pour le calcul serverless. Consultez le contrôle d’accès affiné sur le calcul d’un seul utilisateur.
- Uniquement si vous êtes le propriétaire de la vue matérialisée : ressource de calcul en mode d’accès utilisateur unique exécutant Databricks Runtime entre 14.3 et 15.3.
Pour en savoir plus sur d’autres restrictions lors de l’utilisation des vues matérialisées, consultez Limitations.
Créer une vue matérialisée
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. La création d'une vue matérialisée est une opération synchrone, ce qui signifie que 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 sans serveur est créé automatiquement pour chaque vue matérialisée Databricks SQL. Lorsque la vue matérialisée est actualisée, la pipeline Delta Live Tables traite l’actualisation.
Pour créer une vue matérialisée, utilisez l’instruction CREATE MATERIALIZED VIEW
. Pour soumettre une instruction de création, utilisez l’éditeur SQL dans l’interface utilisateur Azure Databricks, le CLI SQL Databricks ou l'API SQL Databricks.
Vous pouvez sélectionner le canal d’exécution dans lequel l’instruction create s’exécute à l’aide de la TBLPROPERTIES
clause avec la valeur définie "PREVIEW"
sur ou "CURRENT"
. La valeur par défaut est "CURRENT"
. Pour plus d’informations sur les canaux Delta Live Tables, consultez les canaux de runtime Delta Live Tables. Pour plus d’informations sur la syntaxe et les paramètres, consultez CRÉER UNE VUE MATÉRIALISÉE.
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
etUSE SCHEMA
sur le catalogue et le schéma contenant les tables sources pour la vue matérialisée - Privilèges
USE CATALOG
etUSE SCHEMA
sur le catalogue cible et le schéma pour la vue matérialisée - Privilèges
CREATE TABLE
etCREATE 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
base_table1
GROUP BY
date;
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. L’opération est synchrone par défaut, ce qui signifie que la commande se bloque jusqu’à ce que l’opération d’actualisation soit terminée. Pour actualiser une vue matérialisée, utilisez l’instruction REFRESH MATERIALIZED VIEW
. Consultez RAFRAÎCHIR (VUE MATÉRIALISÉE ou TABLE DE STREAMING) pour plus d’informations sur la syntaxe ET les paramètres SQL de cette commande. Pour en savoir plus sur les types de vues matérialisées qui peuvent être actualisées de manière incrémentielle, consultez Actualisation incrémentielle pour les vues matérialisées.
Pour soumettre une instruction de rafraîchissement, utilisez l'éditeur SQL dans l'interface utilisateur Azure Databricks, un notebook attaché à un entrepôt SQL, le CLI SQL Databricks ou l'API SQL Databricks.
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 sans serveur pour traiter les opérations d’actualisation. L’actualisation est gérée par le pipeline Delta Live Tables et la mise à jour est surveillée par l’entrepôt SQL Databricks utilisé pour créer la vue matérialisée. Les vues matérialisées peuvent être mises à jour à l’aide d’un pipeline Delta Live Tables qui s’exécute selon une planification. Consultez le mode de pipeline déclenché et continu.
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. Cela peut être défini à l’aide de la commande Refresh. Consultez REFRESH (MATERIALIZED VIEW ou STREAMING TABLE) Le comportement associé à chaque approche est le suivant :
- Synchrone : une actualisation synchrone empêche d’autres opérations de continuer jusqu’à ce que l’actualisation soit terminée. Si le résultat est nécessaire pour l’étape suivante, par exemple lors du séquencement des opérations d’actualisation dans des outils d’orchestration tels que Databricks Jobs, utilisez une actualisation synchrone. Pour orchestrer des vues matérialisées avec un travail, utilisez le type de tâche SQL . Consultez Planifier et orchestrer des flux de travail.
- Asynchrone : une actualisation asynchrone démarre un travail en arrière-plan sur le calcul Delta Live Tables lorsqu’une actualisation de vue matérialisée commence, ce qui permet à la commande de retourner avant la fin du chargement des données. Ce type d’actualisation peut économiser sur le coût, car l’opération ne contient pas nécessairement de capacité de calcul dans l’entrepôt où la commande est lancée. Si l’actualisation devient inactive et qu’aucune autre tâche n’est en cours d’exécution, l’entrepôt peut s’arrêter pendant que l’actualisation utilise d’autres calculs disponibles. En outre, les actualisations asynchrones prennent en charge le démarrage de plusieurs opérations en parallèle.
Certaines requêtes peuvent être actualisées de manière incrémentielle. Consultez l’actualisation incrémentielle 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. Pour définir une planification, effectuez l’une des opérations suivantes :
- Configurer la planification avec la clause
SCHEDULE
lorsque vous créez la vue matérialisée - Ajoutez une planification avec l’instruction ALTER MATERIALIZED VIEW .
Lorsqu’une planification est créée, un nouveau travail Databricks est automatiquement configuré pour traiter la mise à jour.
Pour afficher la planification, effectuez l’une des opérations suivantes :
- Exécutez l’instruction
DESCRIBE EXTENDED
à partir de l’éditeur SQL dans l’interface utilisateur Azure Databricks. - Utilisez l’Explorateur de catalogues pour afficher l’affichage matérialisé. La planification est répertoriée sous l’onglet Vue d'ensemble , sous État d’actualisation. Consultez Qu’est-ce que Catalog Explorer ?.
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 :
- Copiez et collez le lien affiché dans la dernière ligne d’actualisation de la table retournée 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.
Pour les commandes asynchrones REFRESH
envoyées à l’aide de l’éditeur SQL dans l’interface utilisateur Azure Databricks, vous pouvez afficher l’état d’actualisation en suivant le lien affiché dans le volet Résultats.
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.
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, le CLI SQL Databricks 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, le CLI SQL Databricks ou l'API SQL Databricks.
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 un administrateur de metastore et un administrateur d’espace de travail. Les vues matérialisées créent et utilisent automatiquement des pipelines Delta Live Tables pour traiter les modifications. Pour modifier un propriétaire de vues matérialisé, procédez comme suit :
- Sous l’onglet de traçabilité de la vue matérialisée, cliquez sur Pipelines, puis sur le lien du pipeline.
- Cliquez sur le 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 peutSELECT
la vue matérialisée.REFRESH
: l’utilisateur peutREFRESH
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 ?.
Limitations
- Pour connaître les besoins en matière de calcul et d’espace de travail, consultez Configuration requise.
- 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 valeursNULL
restent dans cette colonne, la valeur d’agrégation résultante de la vue matérialisée est zéro plutôt queNULL
. - Vous ne pouvez pas lire un flux de modification de données à partir d’une vue matérialisée.
- Les requêtes de voyage temporel ne sont pas transférées sur les vues matérialisées.
- 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égationCOUNT DISTINCT
, les fichiers sous-jacents contiennent une liste des valeurs réelles defield_a
.