SELECT sur la table cible sont rapides et légères. Les vues incrémentales prennent en charge toutes les fonctions d’agrégation et passent bien à l’échelle — jusqu’à des pétaoctets de données — car chaque requête s’exécute sur un petit sous-ensemble récent du jeu de données en cours d’insertion.
Les vues matérialisées actualisables, en revanche, sont mises à jour selon une planification. Ces vues réexécutent périodiquement leur requête complète et remplacent le résultat dans la table cible. Cela ressemble au fonctionnement des vues matérialisées dans les bases de données OLTP traditionnelles comme Postgres.
Le choix entre les vues matérialisées incrémentales et actualisables dépend en grande partie de la nature de la requête, de la fréquence à laquelle les données changent et du fait que les mises à jour de la vue doivent refléter chaque ligne au moment de son insertion, ou si une actualisation périodique est acceptable. Comprendre ces compromis est essentiel pour concevoir des vues matérialisées performantes et évolutives dans ClickHouse.
Quand utiliser les vues matérialisées incrémentales
- Vous avez besoin de résultats de requête en temps réel, mis à jour à chaque insertion.
- Vous effectuez fréquemment des agrégations ou des filtrages sur de grands volumes de données.
- Vos requêtes impliquent des transformations ou des agrégations simples sur une seule table.
Quand utiliser les vues matérialisées actualisables
Résumé
- Vous avez besoin de résultats de requête mis en cache et disponibles instantanément, et que de légers retards d’actualisation sont acceptables.
- Vous avez besoin du top N pour un jeu de résultats de requête.
- La taille du jeu de résultats ne croît pas sans limite au fil du temps. Dans le cas contraire, les performances de la vue cible se dégraderont.
- Vous effectuez des jointures complexes ou une dénormalisation impliquant plusieurs tables, nécessitant des mises à jour chaque fois qu’une table source change.
- Vous mettez en place des workflows par lots, des tâches de dénormalisation ou des dépendances entre vues similaires aux DAG de dbt.
Mode APPEND vs REPLACE
APPEND et REPLACE. Ces modes définissent la manière dont le résultat de la requête de la vue est écrit lors de son actualisation.
REPLACE est le comportement par défaut. Chaque fois que la vue est actualisée, le contenu précédent de la table cible est entièrement remplacé par le dernier résultat de la requête. Ce mode convient aux cas d’usage où la vue doit toujours refléter l’état le plus récent, par exemple pour mettre en cache un jeu de résultats.
À l’inverse, APPEND permet d’ajouter de nouvelles lignes à la fin de la table cible au lieu d’en remplacer le contenu. Cela permet d’autres cas d’usage, comme la capture d’instantanés périodiques. APPEND est particulièrement utile lorsque chaque actualisation représente un point dans le temps distinct ou lorsqu’il est souhaitable d’accumuler les résultats dans le temps.
Choisissez le mode APPEND lorsque :
- Vous souhaitez conserver un historique des actualisations passées.
- Vous créez des instantanés ou des rapports périodiques.
- Vous devez collecter de manière incrémentielle les résultats actualisés au fil du temps.
REPLACE lorsque :
- Vous n’avez besoin que du résultat le plus récent.
- Les données obsolètes doivent être entièrement supprimées.
- La vue représente un état actuel ou une table de correspondance.
APPEND dans la création d’une architecture Medallion.