Description
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 fonctionCette 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 fonctionsfà 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)).
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
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
anyany_respect_nullsanyLastanyLast_respect_nullsminmaxsumsumWithOverflowgroupBitAndgroupBitOrgroupBitXorgroupArrayArraygroupUniqArrayArraygroupUniqArrayArrayMapsumMap(sumMappedArrays)minMap(minMappedArrays)maxMap(maxMappedArrays)
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.