Skip to main content
Le moteur hérite de MergeTree en modifiant la logique de fusion des parties de données. ClickHouse remplace toutes les lignes ayant la même clé primaire (ou, plus précisément, la même clé de tri) par une seule ligne (au sein d’une même partie de données) qui stocke une combinaison d’états de fonctions d’agrégation. Vous pouvez utiliser les tables AggregatingMergeTree pour l’agrégation incrémentielle des données, notamment pour les vues matérialisées agrégées. Vous trouverez ci-dessous une vidéo montrant comment utiliser AggregatingMergeTree et les fonctions d’agrégation :
Le moteur traite toutes les colonnes des types suivants : Il est recommandé d’utiliser AggregatingMergeTree si cela réduit le nombre de lignes de plusieurs ordres de grandeur.

Créer une table

Pour une description des paramètres de requête, consultez la description de la requête. Clauses de la requête Lors de la création d’une table AggregatingMergeTree, les mêmes clauses sont requises que pour la création d’une table MergeTree.

SELECT and INSERT

Pour insérer des données, utilisez la requête INSERT SELECT avec des fonctions d’agrégation -State-. Lorsque vous sélectionnez des données dans une table AggregatingMergeTree, utilisez la clause GROUP BY et les mêmes fonctions d’agrégation que lors de l’insertion des données, mais avec le suffixe -Merge. Dans les résultats d’une requête SELECT, les valeurs de type AggregateFunction ont une représentation binaire spécifique à l’implémentation dans tous les formats de sortie de ClickHouse. Par exemple, si vous exportez des données au format TabSeparated avec une requête SELECT, cet export peut ensuite être rechargé à l’aide d’une requête INSERT.

Exemple de vue matérialisée agrégée

L’exemple suivant suppose que vous disposez d’une base de données nommée test. Créez-la si elle n’existe pas encore à l’aide de la commande ci-dessous :
Créez maintenant la table test.visits qui contient les données brutes :
Ensuite, vous avez besoin d’une table AggregatingMergeTree qui stockera des AggregationFunctions chargées de suivre le nombre total de visites et le nombre d’utilisateurs uniques. Créez une vue matérialisée AggregatingMergeTree qui surveille la table test.visits et utilise le type AggregateFunction :
Créez une vue matérialisée qui alimente test.agg_visits à partir de test.visits :
Insérez des données dans la table test.visits :
Les données sont insérées dans test.visits et test.agg_visits. Pour récupérer les données agrégées, exécutez une requête telle que SELECT ... GROUP BY ... depuis la vue matérialisée test.visits_mv :
Ajoutez quelques enregistrements supplémentaires dans test.visits, mais cette fois en utilisant un timestamp différent pour l’un des enregistrements :
Exécutez à nouveau la requête SELECT, qui renverra la sortie suivante :
Dans certains cas, vous pouvez souhaiter éviter la pré-agrégation des lignes au moment de l’insertion afin de reporter le coût de l’agrégation de l’insert time vers le merge time. En règle générale, il est nécessaire d’inclure les colonnes qui ne font pas partie de l’agrégation dans la clause GROUP BY de la définition de la vue matérialisée pour éviter une erreur. Vous pouvez cependant utiliser la fonction initializeAggregation avec le paramètre optimize_on_insert = 0 (activé par défaut) pour y parvenir. L’utilisation de GROUP BY n’est alors plus nécessaire :
Lors de l’utilisation de initializeAggregation, un état d’agrégation est créé pour chaque ligne, sans regroupement. Chaque ligne source produit une ligne dans la vue matérialisée, et l’agrégation proprement dite a lieu plus tard, lorsque AggregatingMergeTree fusionne les parts. Cela n’est vrai que si optimize_on_insert = 0.

Agrégation des éléments de Tuple

Lorsque le paramètre allow_tuple_element_aggregation est activé, les colonnes Tuple sont aplaties récursivement afin que chaque élément terminal participe indépendamment à l’agrégation. Cela signifie que les sous-colonnes AggregateFunction ou SimpleAggregateFunction à l’intérieur d’un Tuple sont agrégées selon leurs fonctions respectives, comme s’il s’agissait de colonnes de premier niveau. Les sous-colonnes appartenant à un Tuple dans la clé de tri sont exclues de l’agrégation. Les sous-colonnes non agrégées sont traitées comme des colonnes ordinaires (leur première valeur est conservée).
Ce paramètre est immuable et doit être spécifié lors de la création de la table.
total_visits est agrégé à l’aide de sum (100 + 200 = 300), tandis que unique_users est agrégé à l’aide de max (max(5, 8) = 8).
Dernière modification le 23 juillet 2026