Quand utiliser les vues matérialisées actualisables ?
Les vues matérialisées actualisables peuvent exécuter des traitements par lots pour des tâches telles que la dénormalisation. Il est possible de créer des dépendances entre des vues matérialisées actualisables, de sorte qu’une vue dépende des résultats d’une autre et ne s’exécute qu’une fois celle-ci terminée. Cela peut remplacer des workflows planifiés ou des DAG simples, comme un job dbt. Pour en savoir plus sur la définition de dépendances entre les vues matérialisées actualisables, consultez CREATE VIEW, section Dependencies.
Comment rafraîchir une vue matérialisée actualisable ?
SYSTEM REFRESH VIEW :
À quand remonte le dernier rafraîchissement d’une vue matérialisée actualisable ?
system.view_refreshes, comme indiqué ci-dessous :
Comment puis-je modifier la fréquence d’actualisation ?
ALTER TABLE...MODIFY REFRESH.
Utiliser APPEND pour ajouter de nouvelles lignes
APPEND vous permet d’ajouter de nouvelles lignes à la fin de la table au lieu de remplacer l’intégralité de la vue.
Cette fonctionnalité peut notamment servir à prendre des instantanés de valeurs à un moment donné. Par exemple, imaginons que nous ayons une table events alimentée par un flux de messages provenant de Kafka, de Redpanda ou d’une autre plateforme de données en streaming.
4096 valeurs dans la colonne uuid. Nous pouvons écrire la requête suivante pour trouver celles dont le nombre total est le plus élevé :
uuid toutes les 10 secondes et le stocker dans une nouvelle table nommée events_snapshot. Le schéma de events_snapshot serait le suivant :
events_snapshot pour obtenir le nombre d’occurrences au fil du temps pour un uuid spécifique :
Exemples
Stack Overflow
votes, users, badges, posts et postlinks.
Dans ce guide, nous avons montré comment dénormaliser le jeu de données postlinks dans la table posts à l’aide de la requête suivante :
posts_with_links, mais dans un système de production, nous pourrions vouloir exécuter cette opération périodiquement.
Les tables posts et postlinks sont toutes deux susceptibles d’être mises à jour. Par conséquent, plutôt que d’essayer d’implémenter cette jointure à l’aide de vues matérialisées incrémentielles, il peut suffire de planifier l’exécution de cette requête à intervalle régulier, par exemple une fois par heure, en stockant les résultats dans une table post_with_links.
C’est là qu’une vue matérialisée actualisable s’avère utile, et nous pouvons en créer une avec la requête suivante :
La syntaxe est ici identique à celle d’une vue matérialisée incrémentielle, à ceci près que nous ajoutons une clause
REFRESH :IMDb
actors, directors, genres, movie_directors, movies et roles.
Nous pouvons ensuite écrire la requête suivante pour calculer un résumé de chaque acteur, trié par nombre décroissant d’apparitions dans des films.