Passer au contenu principal

Description

Le type de données SimpleAggregateFunction stocke l’état intermédiaire d’une fonction d’agrégation, mais pas son état complet, contrairement au type AggregateFunction. Cette optimisation peut être appliquée aux fonctions pour lesquelles la propriété suivante est vérifiée :
le résultat de l’application d’une fonction f à un ensemble de lignes S1 UNION ALL S2 peut être obtenu en appliquant f séparément à des parties de cet ensemble de lignes, puis en appliquant à nouveau f aux résultats : f(S1 UNION ALL S2) = f(f(S1) UNION ALL f(S2)).
Cette propriété garantit que des résultats d’agrégation partiels suffisent pour calculer le résultat combiné. Il n’est donc pas nécessaire de stocker ni de traiter des données supplémentaires. Par exemple, le résultat des fonctions min ou max ne nécessite aucune étape supplémentaire pour calculer le résultat final à partir des étapes intermédiaires, tandis que la fonction avg nécessite de conserver une somme et un nombre, qui seront divisés pour obtenir la moyenne lors d’une étape finale Merge qui combine les états intermédiaires. Les valeurs de fonctions d’agrégation sont généralement produites en appelant une fonction d’agrégation avec le combinateur -SimpleState ajouté au nom de la fonction.

Syntaxe

SimpleAggregateFunction(aggregate_function_name, types_of_arguments...)
Paramètres
  • aggregate_function_name - Le nom d’une fonction d’agrégation.
  • Type - Types des arguments de la fonction d’agrégation.

Fonctions prises en charge

Les fonctions d’agrégation suivantes sont prises en charge :
Les valeurs de SimpleAggregateFunction(func, Type) ont le même Type ; contrairement au type AggregateFunction, il n’est donc pas nécessaire d’appliquer les combinateurs -Merge/-State.Le type SimpleAggregateFunction offre de meilleures performances que le type AggregateFunction pour les mêmes fonctions d’agrégation.

Exemple

CREATE TABLE simple (id UInt64, val SimpleAggregateFunction(sum, Double)) ENGINE=AggregatingMergeTree ORDER BY id;
Dernière modification le 25 juin 2026