| Stockage et emplacement des données | Stockent leurs résultats dans une table cible distincte et explicite, en agissant comme des déclencheurs à l’insertion lors d’un INSERT dans une table source. | Les projections créent des dispositions de données optimisées, physiquement stockées aux côtés des données de la table principale, et invisibles pour l’utilisateur. |
| Mécanisme de mise à jour | Fonctionnent de manière synchrone lors d’un INSERT dans la table source (pour les vues matérialisées incrémentales). Remarque : elles peuvent aussi être planifiées à l’aide de vues matérialisées actualisables. | Mises à jour asynchrones en arrière-plan après un INSERT dans la table principale. |
| Interaction avec les requêtes | Travailler avec des vues matérialisées nécessite d’interroger directement la table cible, ce qui signifie que vous devez connaître l’existence des vues matérialisées lors de la rédaction des requêtes. | Les projections sont sélectionnées automatiquement par l’optimiseur de requêtes de ClickHouse et sont transparentes, au sens où l’utilisateur n’a pas à modifier ses requêtes sur la table avec projection pour en tirer parti. À partir de la version 25.6, il est également possible de filtrer sur plusieurs projections. |
Gestion de UPDATE / DELETE | Ne réagissent pas automatiquement aux opérations UPDATE ou DELETE sur la table source, car les vues matérialisées n’ont aucune connaissance de la table source et agissent uniquement comme des déclencheurs à l’insertion sur une table source. Cela peut entraîner une possible obsolescence des données entre les tables source et cible, et nécessite des solutions de contournement ou un full refresh périodique. (via une vue matérialisée actualisable). | Par défaut, elles sont incompatibles avec les lignes DELETED (en particulier les lightweight deletes). lightweight_mutation_projection_mode (v24.7+) peut activer cette compatibilité. |
Prise en charge de JOIN | Oui. Les vues matérialisées actualisables peuvent être utilisées pour une dénormalisation complexe. Les vues matérialisées incrémentales ne se déclenchent que lors d’insertions dans la table la plus à gauche. | Non. Les opérations JOIN ne sont pas prises en charge dans les définitions de projections pour filtrer les données matérialisées. En revanche, les requêtes qui joignent des tables avec des projections fonctionnent normalement : les projections optimisent l’accès à chaque table individuellement. |
Clause WHERE dans la définition | Oui. Des clauses WHERE peuvent être incluses pour filtrer les données avant la matérialisation. | Non. Les clauses WHERE ne sont pas prises en charge dans les définitions de projections pour filtrer les données matérialisées. |
| Capacités d’enchaînement | Oui, la table cible d’une vue matérialisée peut être la source d’une autre vue matérialisée, ce qui permet des pipelines en plusieurs étapes. | Non. Les projections ne peuvent pas être enchaînées. |
| Moteurs de table applicables | Peuvent être utilisées avec différents moteurs de table de tables source, mais les tables cibles appartiennent généralement à la famille MergeTree. | Disponibles uniquement pour les moteurs de table de la famille MergeTree. |
| Gestion des défaillances | Une défaillance lors de l’insertion des données signifie que les données sont perdues dans la table cible, ce qui peut entraîner une incohérence potentielle. | Les défaillances sont gérées silencieusement en arrière-plan. Les requêtes peuvent mélanger de manière transparente des parties matérialisées et non matérialisées. |
| Surcharge opérationnelle | Nécessitent la création explicite d’une table cible et souvent un backfill manuel. La gestion de la cohérence avec UPDATE/DELETE accroît la complexité. | Les projections sont maintenues automatiquement, restent synchronisées et présentent généralement une charge opérationnelle plus faible. |
Compatibilité des requêtes FINAL | Généralement compatibles, mais nécessitent souvent un GROUP BY sur la table cible. | Ne fonctionnent pas avec les requêtes FINAL. |
| Lazy materialization | Oui. | Surveillez les problèmes de compatibilité des projections lors de l’utilisation des fonctionnalités de matérialisation. Vous devrez peut-être définir query_plan_optimize_lazy_materialization = false |
| Réplicas parallèles | Oui. | Non. |
optimize_read_in_order | Oui. | Oui. |
| Mises à jour et suppressions légères | Oui. | Non. |