Actualisation d’une vue matérialisée - Amazon Redshift

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

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 SQL structures suivantes utilisées dans la requête lors de la définition de la vue matérialisée :

    • Constructions contenant les clausesSELECT,FROM, [INNER] JOINWHERE, GROUP BY ouHAVING.

    • Constructions contenant des agrégations, telles queSUM,, MIN MAXAVG, et. COUNT

    • La plupart des SQL fonctions 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'SQLinstruction 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 SELECT requête 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 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 définies à l'aide d'une requête utilisant les éléments suivants : SQL

  • OUTERJOIN(RIGHTLEFT, ouFULL).

  • Les opérations définies UNIONINTERSECT,EXCEPT, etMINUS.

  • Les fonctions d'agrégationMEDIAN, PERCENTILE _CONT, _LISTAGG, STDDEV STDDEV _SAMP,, POP APPROXIMATE COUNT APPROXIMATEPERCENTILE, et les fonctions d'agrégation au niveau des bits.

    Note

    Les fonctionsCOUNT,SUM, et d'AVGagrégation sont prises en charge.

  • DISTINCTfonctions agrégées, telles que DISTINCT COUNT DISTINCTSUM, et ainsi de suite.

  • 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 dans le suivi en version préliminaire pour les vues matérialisées définies à l’aide de formats autres que ceux répertoriés ci-dessus. Pour plus d’informations sur la configuration des clusters en version préliminaire, consultez Création d’un cluster en version préliminaire dans le Guide de gestion Amazon Redshift. Pour en savoir plus sur la configuration des groupes de travail en version préliminaire, consultez Création d’un groupe de travail en version préliminaire dans le Guide de gestion Amazon Redshift.

Actualisation automatique d’une vue matérialisée

Amazon Redshift peut actualiser automatiquement les vues matérialisées avec les up-to-date données de ses tables de base lorsque des vues matérialisées sont créées ou modifiées pour inclure 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. Si tel est le cas, envisagez d'utiliser une actualisation manuelle comme décrit dans REFRESH MATERIALIZED VIEW ou une actualisation planifiée à l'aide des API opérations du planificateur Amazon Redshift ou de la console.

Vous pouvez définir le rafraîchissement automatique pour les vues matérialisées à l'aide de. CREATE MATERIALIZED VIEW Vous pouvez également utiliser la AUTO REFRESH clause 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 une vue matérialisée de manière explicite à l'aide de REFRESH MATERIALIZED VIEW la commande même si vous n'avez pas activé l'actualisation automatique pour la vue matérialisée.

  • Amazon Redshift n’actualise pas automatiquement les vues matérialisées définies sur les tables externes.

  • Pour connaître l'état d'actualisation, vous pouvez vérifier SVL _MV_ REFRESH _STATUS, qui enregistre les requêtes initiées par l'utilisateur ou actualisées automatiquement.

  • Pour exécuter REFRESH sur des vues matérialisées ne nécessitant que le recalcul, assurez-vous que vous êtes autorisé à utiliser les CREATE schémas. Pour de plus amples informations, veuillez consulter GRANT.