Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Actualisation d’une vue matérialisée
Cette rubrique décrit comment actualiser les données d'une vue matérielle à partir des tables sous-jacentes.
Lorsque vous créez une vue matérialisée, son contenu reflète l’état de la ou des tables de base de données sous-jacentes à ce moment-là. Les données de la vue matérialisée restent inchangées, même si les applications modifient les données dans les tables sous-jacentes. Pour mettre à jour les données de la vue matérialisée, vous pouvez utiliser l’instruction REFRESH MATERIALIZED VIEW
à tout moment afin d’actualiser manuellement les vues matérialisées. Lorsque vous utilisez cette instruction, Amazon Redshift identifie les modifications qui ont eu lieu dans la ou les tables de base, puis applique ces modifications à la vue matérialisée.
Amazon Redshift offre deux politiques pour actualiser une vue matérialisée :
-
Dans de nombreux cas, Amazon Redshift peut effectuer une actualisation incrémentielle. Dans une actualisation incrémentielle, Amazon Redshift identifie rapidement les modifications apportées aux données dans les tables de base depuis la dernière actualisation et met à jour les données dans la vue matérialisée. L’actualisation incrémentielle est prise en charge sur les constructions SQL suivantes utilisées dans la requête lors de la définition de la vue matérialisée :
-
Les constructions qui contiennent les clauses SELECT, FROM, [INNER] JOIN, WHERE, GROUP BY ou HAVING.
-
Les constructions qui contiennent des agrégations, telles que SUM, MIN, MAX, AVG et COUNT.
-
La plupart des fonctions SQL intégrées, en particulier celles qui sont immuables, étant donné qu’elles ont les mêmes arguments d’entrée et produisent toujours la même sortie.
L’actualisation incrémentielle est également prise en charge pour une vue matérialisée basée sur une table d’unité de partage des données.
-
-
Si une actualisation incrémentielle est impossible, Amazon Redshift effectue une actualisation complète. Une actualisation complète réexécute l’instruction SQL sous-jacente, en remplaçant toutes les données de la vue matérialisée.
-
Amazon Redshift choisit automatiquement la méthode d'actualisation pour une vue matérialisée en fonction de la requête SELECT utilisée pour définir la vue matérialisée.
L’actualisation d’une vue matérialisée sur une vue matérialisée n’est pas un processus en cascade. En d'autres termes, supposons que vous disposiez d'une vue matérialisée A qui dépend de la vue matérialisée B. Dans ce cas, lorsque le REFRESH MATERIALIZED VIEW A est invoqué, A est actualisé à l'aide de la version actuelle de B, même si B l'est. out-of-date Pour mettre la vue A à jour, actualisez d’abord la vue B dans une transaction distincte.
L’exemple suivant montre comment créer un plan d’actualisation complet pour une vue matérialisée par programmation. Pour actualiser la vue matérialisée v, actualisez d’abord la vue matérialisée u. Pour actualiser la vue matérialisée w, actualisez d’abord la vue matérialisée u, puis la vue matérialisée v.
CREATE TABLE t(a INT);
CREATE MATERIALIZED VIEW u AS SELECT * FROM t;
CREATE MATERIALIZED VIEW v AS SELECT * FROM u;
CREATE MATERIALIZED VIEW w AS SELECT * FROM v;
WITH RECURSIVE recursive_deps (mv_tgt, lvl, mv_dep) AS
( SELECT trim(name) as mv_tgt, 0 as lvl, trim(ref_name) as mv_dep
FROM stv_mv_deps
UNION ALL
SELECT R.mv_tgt, R.lvl+1 as lvl, trim(S.ref_name) as mv_dep
FROM stv_mv_deps S, recursive_deps R
WHERE R.mv_dep = S.name
)
SELECT mv_tgt, mv_dep from recursive_deps
ORDER BY mv_tgt, lvl DESC;
mv_tgt | mv_dep
--------+--------
v | u
w | u
w | v
(3 rows)
L'exemple suivant affiche un message d'information lorsque vous exécutez REFRESH MATERIALIZED VIEW sur une vue matérialisée qui dépend d'une vue out-of-date matérialisée.
create table a(a int);
create materialized view b as select * from a;
create materialized view c as select * from b;
insert into a values (1);
refresh materialized view c;
INFO: Materialized view c is already up to date. However, it depends on another materialized view that is not up to date.
REFRESH MATERIALIZED VIEW b;
INFO: Materialized view b was incrementally updated successfully.
REFRESH MATERIALIZED VIEW c;
INFO: Materialized view c was incrementally updated successfully.
Pour l’instant, Amazon Redshift présente les limitations suivantes pour l’actualisation incrémentielle des vues matérialisées.
Amazon Redshift ne prend pas en charge l’actualisation incrémentielle pour les vues matérialisées qui sont définies avec une requête utilisant les éléments SQL suivants :
-
OUTER JOIN (RIGHT, LEFT ou FULL).
-
Les opérations d’ensemble UNION, INTERSECT, EXCEPT et MINUS.
-
Les fonctions d’agrégation MEDIAN, PERCENTILE_CONT, LISTAGG, STDDEV_SAMP, STDDEV_POP, APPROXIMATE COUNT, APPROXIMATE PERCENTILE et les fonctions d’agrégation bit par bit.
Note
Les fonctions d’agrégation COUNT, SUM et AVG sont prises en charge.
-
Fonctions d’agrégation DISTINCT, telles que DISTINCT COUNT, DISTINCT SUM, etc.
Fonctions de fenêtrage.
Requête qui utilise des tables temporaires pour l’optimisation des requêtes, telle que l’optimisation des sous-expressions courantes.
Sous-requêtes.
-
Tables externes référençant les formats suivants dans la requête qui définit la vue matérialisée.
-
Delta Lake
-
Hudi
L'actualisation incrémentielle est prise en charge pour les vues matérialisées définies à l'aide de formats autres que ceux répertoriés ci-dessus. Pour de plus amples informations, veuillez consulter Vues matérialisées sur des tables de lacs de données externes dans Amazon Redshift Spectrum.
-
Actualisation automatique d’une vue matérialisée
Amazon Redshift peut actualiser automatiquement les vues matérialisées à l'aide up-to-date des données de ses tables de base lorsque des vues matérialisées sont créées ou modifiées pour disposer de l'option d'actualisation automatique. Amazon Redshift actualise automatiquement les vues matérialisées dès que possible après la modification des tables de base.
Pour terminer l’actualisation des vues matérialisées les plus importantes avec un impact minimal sur les applications actives dans votre cluster, Amazon Redshift prend en compte plusieurs facteurs. Ces facteurs incluent la charge système actuelle, les ressources nécessaires à l’actualisation, les ressources de cluster disponibles et la fréquence d’utilisation des vues matérialisées.
Amazon Redshift privilégie vos charges de travail par rapport à l’actualisation automatique et peut arrêter cette dernière pour préserver les performances de la charge de travail des utilisateurs. Cette approche peut retarder l’actualisation de certaines vues matérialisées. Dans certains cas, il se peut que vous ayez besoin d’un comportement d’actualisation plus déterministe pour vos vues matérialisées. Le cas échéant, envisagez une actualisation manuelle comme décrit dans REFRESH MATERIALIZED VIEW ou une actualisation planifiée à l’aide des opérations d’API du planificateur Amazon Redshift ou de la console.
Vous pouvez définir l’actualisation automatique des vues matérialisées à l’aide de CREATE MATERIALIZED VIEW. Vous pouvez également utiliser la clause AUTO REFRESH pour actualiser automatiquement les vues matérialisées. Pour plus d’informations sur la création de vues matérialisées, consultez CREATE MATERIALIZED VIEW. Vous pouvez activer l’actualisation automatique d’une vue matérialisée via ALTER MATERIALIZED VIEW.
Tenez compte des éléments suivants lorsque vous actualisez des vues matérialisées :
Vous pouvez toujours actualiser directement une vue matérialisée à l’aide de la commande REFRESH MATERIALIZED VIEW même si vous n’avez pas activé l’actualisation automatique.
Amazon Redshift n’actualise pas automatiquement les vues matérialisées définies sur les tables externes.
Pour en savoir plus sur le statut d’actualisation, vous pouvez vérifier SVL_MV_REFRESH_STATUS, qui enregistre les requêtes lancées par l’utilisateur ou actualisées automatiquement.
Pour exécuter REFRESH sur des vues matérialisées de recalcul, assurez-vous de disposer de l’autorisation CREATE sur les schémas. Pour de plus amples informations, veuillez consulter GRANT.