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 lignesS1 UNION ALL S2peut être obtenu en appliquantfséparément à des parties de cet ensemble de lignes, puis en appliquant à nouveaufaux 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 :
anyany_respect_nullsanyLastanyLast_respect_nullsminmaxsumsumWithOverflowgroupBitAndgroupBitOrgroupBitXorgroupArrayArraygroupUniqArrayArraygroupUniqArrayArrayMapsumMap(sumMappedArrays)minMap(minMappedArrays)maxMap(maxMappedArrays)
Exemple
CREATE TABLE simple (id UInt64, val SimpleAggregateFunction(sum, Double)) ENGINE=AggregatingMergeTree ORDER BY id;