Note
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de changer d’annuaire.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de changer d’annuaire.
Une vue matérialisée est une vue où les résultats précalculés sont disponibles pour la requête et peuvent être mis à jour pour refléter les modifications apportées à l’entrée. Les vues matérialisées sont soutenues par un pipeline. Chaque fois qu’une vue matérialisée est mise à jour, les résultats des requêtes sont recalculés pour refléter les modifications apportées aux jeux de données en amont. Vous pouvez mettre à jour les vues matérialisées manuellement ou selon une planification.
Pour en savoir plus sur l’exécution ou la planification des mises à jour, consultez Exécuter une mise à jour de pipeline.
Syntaxe
CREATE [OR REFRESH] [PRIVATE] MATERIALIZED VIEW
view_name
[ column_list ]
[ view_clauses ]
AS query
column_list
( { column_name column_type column_properties } [, ...]
[ column_constraint ] [, ...]
[ , table_constraint ] [...] )
column_properties
{ NOT NULL | COMMENT column_comment | column_constraint | MASK clause } [ ... ]
view_clauses
{ USING DELTA |
PARTITIONED BY (col [, ...]) |
CLUSTER BY clause |
LOCATION path |
COMMENT view_comment |
TBLPROPERTIES clause |
WITH { ROW FILTER clause } } [...]
Paramètres
REFRESH
S’il est spécifié, crée l’affichage ou met à jour une vue existante et son contenu.
PRIVÉ
Crée une vue matérialisée privée. Une vue matérialisée privée peut être utile comme table intermédiaire dans un pipeline que vous ne souhaitez pas publier dans le catalogue.
- Ils ne sont pas ajoutés au catalogue et sont uniquement accessibles dans le pipeline de définition
- Ils peuvent avoir le même nom qu’un objet existant dans le catalogue. Dans le pipeline, si une vue matérialisée privée et un objet dans le catalogue ont le même nom, les références au nom sont résolues en vue matérialisée privée.
- Les vues matérialisées privées ne sont conservées que pendant la durée de vie du pipeline, et pas seulement lors d’une mise à jour unique.
Les vues matérialisées privées ont été créées précédemment avec le
TEMPORARYparamètre.view_name
Nom de la vue nouvellement créée. Le nom complet de la vue doit être unique.
Les vues matérialisées privées peuvent avoir le même nom qu’un objet publié dans le catalogue.
column_list
Étiquette au choix les colonnes dans le résultat de la requête de la vue. Si vous fournissez une liste de colonnes, le nombre d’alias de colonnes doit correspondre au nombre d’expressions de la requête. Si aucune liste de colonnes n'est spécifiée, les alias sont dérivés du contenu de la vue.
-
Les noms de colonnes doivent être uniques et mappés aux colonnes de sortie de la requête.
column_type
Spécifie le type de données de la colonne. Tous les types de données pris en charge par Azure Databricks ne sont pas pris en charge par les vues matérialisées.
column_comment
Littéral
STRINGfacultatif décrivant la colonne. Cette option doit être spécifiée aveccolumn_type. Si le type de colonne n’est pas spécifié, le commentaire de colonne est ignoré.-
Ajoute une contrainte qui valide les données au fur et à mesure qu’elles circulent dans la table. Voir Gérer la qualité des données avec les attentes de la chaîne de traitement.
-
Important
Cette fonctionnalité est disponible en préversion publique.
Permet d’ajouter une fonction de masque de colonne pour anonymiser les données sensibles. Consultez les filtres de lignes et les masques de colonne.
-
contrainte_de_table
Important
Cette fonctionnalité est disponible en préversion publique.
Lorsque vous spécifiez un schéma, vous pouvez définir des clés primaires et étrangères. Les contraintes sont informationnelles et ne sont pas appliquées. Consultez la clause CONSTRAINT dans la référence du langage SQL.
Note
Pour définir des contraintes de table, votre pipeline doit être compatible avec le Unity Catalog.
view_clauses
Spécifiez éventuellement les propriétés de partitionnement, de commentaires et définies par l’utilisateur pour la vue matérialisée. Chaque sous-clause ne peut être spécifiée qu’une seule fois.
UTILISATION DE DELTA
Spécifie le format de données. La seule option est DELTA.
Cette clause est facultative et est définie par défaut sur DELTA.
PARTITIONNÉ PAR
Liste facultative d’une ou plusieurs colonnes à utiliser pour le partitionnement dans la table. Mutuellement exclusif avec
CLUSTER BY.Le clustering liquide offre une solution flexible et optimisée pour le regroupement. Envisagez d’utiliser
CLUSTER BYplutôt quePARTITIONED BYpour les pipelines.CLUSTER BY
Activez le clustering liquide sur la table et définissez les colonnes à utiliser comme clés de clustering. Utilisez le clustering liquide automatique avec
CLUSTER BY AUTO, et Databricks choisit intelligemment les clés de clustering pour optimiser les performances des requêtes. Mutuellement exclusif avecPARTITIONED BY.EMPLACEMENT
Emplacement de stockage facultatif pour les données de la table. S’il n’est pas défini, le système utilise par défaut l’emplacement de stockage du pipeline.
Cette option est disponible uniquement lors de la publication sur le metastore Hive. Dans le catalogue Unity, l’emplacement est géré automatiquement.
COMMENTAIRE
Description facultative de la table.
TBLPROPERTIES
Liste facultative des propriétés de table disponibles pour la table.
AVEC ROW FILTER
Important
Cette fonctionnalité est disponible en préversion publique.
Ajoute une fonction de filtre de ligne au tableau. Toutes les requêtes futures de cette table reçoivent un sous-ensemble de lignes pour lesquelles la fonction prend la valeur TRUE. Cela est utile pour le contrôle d’accès affiné, car la fonction peut inspecter l’identité et les appartenances à un groupe de l’utilisateur appelant afin de décider s’il convient de filtrer certaines lignes.
Consultez la clause
ROW FILTER.query
Requête qui définit le jeu de données de la table.
Autorisations requises
L’utilisateur d’identification pour un pipeline doit avoir les autorisations suivantes :
- Le privilège
SELECTsur les tables de base référencées par la vue matérialisée. - Le privilège
USE CATALOGsur le catalogue parent et le privilègeUSE SCHEMAsur le schéma parent. - Le privilège
CREATE MATERIALIZED VIEWsur le schéma de la vue matérialisée.
Pour qu’un utilisateur puisse mettre à jour le pipeline dans lequel la vue matérialisée est définie, il a besoin des éléments suivants :
- Le privilège
USE CATALOGsur le catalogue parent et le privilègeUSE SCHEMAsur le schéma parent. - La propriété de la vue matérialisée ou le privilège
REFRESHsur la vue matérialisée. - Le propriétaire de la vue matérialisée doit avoir le privilège
SELECTsur les tables de base référencées par la vue matérialisée.
Pour qu’un utilisateur puisse interroger la vue matérialisée résultante, il a besoin des éléments suivants :
- Le privilège
USE CATALOGsur le catalogue parent et le privilègeUSE SCHEMAsur le schéma parent. - Le privilège
SELECTsur la vue matérialisée.
Limites
- Lorsqu’une vue matérialisée avec un
sumagrégat sur une colonne pouvant contenir des valeurs NULL a la dernière valeur non NULL supprimée de cette colonne et qu'il ne reste que des valeursNULLdans cette colonne, la valeur d’agrégation résultante de la vue matérialisée retourne zéro dans ce cas au lieu deNULL. - La référence de colonne ne nécessite pas d’alias. Les expressions de référence autres que les colonnes nécessitent un alias, comme dans l’exemple suivant :
- Autorisé :
SELECT col1, SUM(col2) AS sum_col2 FROM t GROUP BY col1 - Non autorisé :
SELECT col1, SUM(col2) FROM t GROUP BY col1
- Autorisé :
-
NOT NULLdoit être spécifié manuellement avecPRIMARY KEYafin d’être une instruction valide. - Les vues matérialisées ne prennent pas en charge les colonnes d’identité ou les clés de substitution.
- Les vues matérialisées ne prennent pas en charge les commandes
OPTIMIZEetVACUUM. La maintenance s’effectue automatiquement. - Le changement de nom de la table ou du propriétaire n'est pas supporté.
- Les colonnes générées, les colonnes d’identité et les colonnes par défaut ne sont pas prises en charge.
Examples
-- Create a materialized view by reading from an external data source, using the default schema:
CREATE OR REFRESH MATERIALIZED VIEW taxi_raw
AS SELECT * FROM read_files("/databricks-datasets/nyctaxi/sample/json/")
-- Create a materialized view by reading from a dataset defined in a pipeline:
CREATE OR REFRESH MATERIALIZED VIEW filtered_data
AS SELECT
...
FROM taxi_raw
-- Specify a schema and clustering columns for a table:
CREATE OR REFRESH MATERIALIZED VIEW sales
(customer_id STRING,
customer_name STRING,
number_of_line_items STRING,
order_datetime STRING,
order_number LONG,
order_day_of_week STRING GENERATED ALWAYS AS (dayofweek(order_datetime))
) CLUSTER BY (order_day_of_week, customer_id)
COMMENT "Raw data on sales"
AS SELECT * FROM ...
-- Specify partition columns for a table:
CREATE OR REFRESH MATERIALIZED VIEW sales
(customer_id STRING,
customer_name STRING,
number_of_line_items STRING,
order_datetime STRING,
order_number LONG,
order_day_of_week STRING GENERATED ALWAYS AS (dayofweek(order_datetime))
) PARTITIONED BY (order_day_of_week)
COMMENT "Raw data on sales"
AS SELECT * FROM ...
-- Specify a primary and foreign key constraint for a table:
CREATE OR REFRESH MATERIALIZED VIEW sales
(customer_id STRING NOT NULL PRIMARY KEY,
customer_name STRING,
number_of_line_items STRING,
order_datetime STRING,
order_number LONG,
order_day_of_week STRING GENERATED ALWAYS AS (dayofweek(order_datetime)),
CONSTRAINT fk_customer_id FOREIGN KEY (customer_id) REFERENCES main.default.customers(customer_id)
)
COMMENT "Raw data on sales"
AS SELECT * FROM ...
-- Specify a row filter and mask clause for a table:
CREATE OR REFRESH MATERIALIZED VIEW sales (
customer_id STRING MASK catalog.schema.customer_id_mask_fn,
customer_name STRING,
number_of_line_items STRING COMMENT 'Number of items in the order',
order_datetime STRING,
order_number LONG,
order_day_of_week STRING GENERATED ALWAYS AS (dayofweek(order_datetime))
)
COMMENT "Raw data on sales"
WITH ROW FILTER catalog.schema.order_number_filter_fn ON (order_number)
AS SELECT * FROM sales_bronze