Une vue matérialisée stocke les résultats précalculés d'opérations coûteuses telles que les jointures (JOIN) et les agrégations (AGGREGATE). Les requêtes peuvent ainsi réutiliser ces résultats au lieu de les recalculer, ce qui améliore les performances.
Limites
Les vues matérialisées sont prises en charge uniquement à partir de la version V1.3 de Hologres. Si votre instance utilise une version antérieure, consultez la section Erreurs courantes lors de la préparation d'une mise à niveau ou rejoignez le groupe DingTalk de Hologres pour obtenir de l'aide. Pour plus d'informations, consultez la rubrique Comment obtenir un support en ligne supplémentaire ?.
Vous trouverez les limites détaillées et les opérations SQL associées dans la rubrique Gestion des vues matérialisées avec SQL.
Créer une vue matérialisée
-
Syntaxe
Créez une vue matérialisée :
CREATE MATERIALIZED VIEW <mv_name> AS <QUERY BODY>;mv_name : nom de la vue matérialisée. QUERY BODY : instruction de requête. Pour plus d'informations, consultez la rubrique SELECT.
-
Exemples
-
Créez une vue matérialisée pour une table non partitionnée.
BEGIN; CREATE TABLE base_sales( day text not null, hour int , ts timestamptz, amount float, pk text not null primary key ); CALL SET_TABLE_PROPERTY('base_sales', 'mutate_type', 'appendonly'); --After the materialized view is dropped, run the following command to disable the appendonly property for the source table. --CALL SET_TABLE_PROPERTY('base_sales', 'mutate_type', 'none'); CREATE MATERIALIZED VIEW mv_sales AS SELECT day, hour, avg(amount) AS amount_avg FROM base_sales GROUP BY day, hour; COMMIT; insert into base_sales values(to_char(now(),'YYYYMMDD'),'12',now(),100,'pk1'); insert into base_sales values(to_char(now(),'YYYYMMDD'),'12',now(),200,'pk2'); insert into base_sales values(to_char(now(),'YYYYMMDD'),'12',now(),300,'pk3'); -
Créez une vue matérialisée pour une table partitionnée.
BEGIN; CREATE TABLE base_sales_p( day text not null, hour int, ts timestamptz, amount float, pk text not null, primary key (day, pk) ) partition by list(day); CALL SET_TABLE_PROPERTY('base_sales_p', 'mutate_type', 'appendonly'); --The day column is a partition key column and must be included in the GROUP BY clause of the view. CREATE MATERIALIZED VIEW mv_sales_p AS SELECT day, hour, avg(amount) AS amount_avg FROM base_sales_p GROUP BY day, hour; COMMIT; create table base_sales_20220101 partition of base_sales_p for values in('20220101');
-
Interroger une vue matérialisée
Interrogez une vue matérialisée :
SELECT * FROM mv_sales WHERE day = to_char(now(),'YYYYMMDD') AND hour = 12;
Supprimer une vue matérialisée
-
Syntaxe
Supprimez une vue matérialisée :
DROP MATERIALIZED VIEW <mv_name>;mv_name : nom de la vue matérialisée.
-
Exemple
DROP MATERIALIZED VIEW mv_sales;