-If
Le suffixe -If peut être ajouté au nom de n’importe quelle fonction d’agrégation. Dans ce cas, la fonction d’agrégation accepte un argument supplémentaire – une condition (de type Uint8). La fonction d’agrégation traite uniquement les lignes pour lesquelles la condition est remplie. Si la condition n’est jamais remplie, elle renvoie une valeur par défaut (généralement des zéros ou des chaînes vides). Exemples :sumIf(column, cond), countIf(cond), avgIf(x, cond), quantilesTimingIf(level1, level2)(x, cond), argMinIf(arg, val, cond) et ainsi de suite.
Avec les fonctions d’agrégation conditionnelles, vous pouvez calculer des agrégats pour plusieurs conditions à la fois, sans utiliser de sous-requêtes ni de JOIN. Par exemple, les fonctions d’agrégation conditionnelles peuvent être utilisées pour implémenter la fonctionnalité de comparaison de segments.
-Array
Le suffixe -Array peut être appliqué à n’importe quelle fonction d’agrégation. Dans ce cas, la fonction d’agrégation prend des arguments de type ‘Array(T)’ (tableaux) au lieu d’arguments de type ‘T’. Si la fonction d’agrégation accepte plusieurs arguments, ceux-ci doivent être des tableaux de même longueur. Lors du traitement de tableaux, la fonction d’agrégation se comporte comme la fonction d’agrégation d’origine sur l’ensemble des éléments des tableaux. Exemple 1 :sumArray(arr) - Fait le total de tous les éléments de tous les tableaux ‘arr’. Dans cet exemple, on aurait pu l’écrire plus simplement : sum(arraySum(arr)).
Exemple 2 : uniqArray(arr) – Compte le nombre d’éléments uniques dans tous les tableaux ‘arr’. On pourrait le faire plus simplement ainsi : uniq(arrayJoin(arr)), mais il n’est pas toujours possible d’ajouter ‘arrayJoin’ à une requête.
-If et -Array peuvent être combinés. Cependant, ‘Array’ doit venir en premier, puis ‘If’. Exemples : uniqArrayIf(arr, cond), quantilesTimingArrayIf(level1, level2)(arr, cond). En raison de cet ordre, l’argument ‘cond’ ne sera pas un tableau.
-Map
Le suffixe -Map peut être ajouté à toute fonction d’agrégation. Cela crée une fonction d’agrégation qui prend un type Map en argument et agrège séparément les valeurs de chaque clé de la map à l’aide de la fonction d’agrégation spécifiée. Le résultat est lui aussi de type Map. Exemple-SimpleState
Si vous appliquez ce combinateur, la fonction d’agrégation renvoie la même valeur, mais avec un type différent. Il s’agit d’une SimpleAggregateFunction(…) qui peut être stockée dans une table pour être utilisée avec les tables AggregatingMergeTree. Syntaxex— Paramètres de la fonction d’agrégation.
SimpleAggregateFunction(...).
Exemple
Query
Response
-State
Si vous appliquez ce combinateur, la fonction d’agrégation ne renvoie pas la valeur finale (par exemple, le nombre de valeurs uniques pour la fonction uniq), mais un état intermédiaire de l’agrégation (pouruniq, il s’agit de la table de hachage utilisée pour calculer le nombre de valeurs uniques). Il s’agit d’une AggregateFunction(...) qui peut être utilisée pour un traitement ultérieur ou stockée dans une table afin de finaliser l’agrégation plus tard.
Veuillez noter que -MapState n’est pas invariant pour un même jeu de données, car l’ordre des données dans l’état intermédiaire peut changer, même si cela n’a pas d’impact sur l’ingestion de ces données.
- le moteur de table AggregatingMergeTree ;
- la fonction finalizeAggregation ;
- la fonction runningAccumulate ;
- le combinateur -Merge ;
- le combinateur -MergeState.
-Merge
Si vous appliquez ce combinateur, la fonction d’agrégation prend l’état d’agrégation intermédiaire en argument, fusionne les états pour achever l’agrégation et renvoie la valeur obtenue.-MergeState
Fusionne les états d’agrégation intermédiaires de la même manière que le combinateur -Merge. Cependant, il ne renvoie pas la valeur obtenue, mais un état d’agrégation intermédiaire, à l’instar du combinateur -State.-ForEach
Convertit une fonction d’agrégation pour les tables en une fonction d’agrégation pour les tableaux, qui agrège les éléments correspondants de chaque tableau et renvoie un tableau de résultats. Par exemple,sumForEach pour les tableaux [1, 2], [3, 4, 5] et [6, 7] renvoie le résultat [10, 13, 5] après avoir additionné les éléments correspondants.
-Tuple
Le suffixe-Tuple peut être ajouté à n’importe quelle fonction d’agrégation. La fonction combinée prend un argument de type Tuple pour chaque argument de la fonction d’agrégation sous-jacente ; tous les tuples doivent avoir le même nombre d’éléments. L’agrégation est appliquée indépendamment à chaque position d’élément : elle reçoit l’élément correspondant de chaque Tuple et renvoie un Tuple de résultats.
Si le premier Tuple d’entrée comporte des noms d’éléments explicites, ils sont conservés dans le résultat.
Les fonctions d’agrégation qui gèrent elles-mêmes les valeurs NULL (anyRespectNulls, anyLastRespectNulls, le modificateur RESPECT NULLS) ne prennent pas en charge le type Nullable(Tuple(...)) comme argument ; utilisez plutôt des éléments Nullable.
Syntaxe
tuple1[, tuple2, ...]— Colonnes de typeTuple, une pour chaque argument de la fonction d’agrégation sous-jacente, toutes ayant le même nombre d’éléments. Chaque élément doit être d’un type pris en charge par la fonction d’agrégation sous-jacente pour cette position d’argument.
- Un
Tuplecontenant le résultat de l’application de la fonction d’agrégation à chaque élément indépendamment.
Tuple(aggFunction(element1), aggFunction(element2), ...).
Exemple
Requête :
GROUP BY :
Tuple fournit un argument à la fonction sous-jacente, et les éléments sont appariés selon leur position :
a1 et b1 sont anticorrélés, tandis que a2 et b2 sont proportionnels ; le résultat est donc (-1, 1).
-Tuple peut être combiné avec d’autres combinateurs, comme -If. Par exemple : sumTupleIf(tuple_column, cond).
-Distinct
Chaque combinaison distincte d’arguments n’est agrégée qu’une seule fois. Les valeurs répétées sont ignorées. Exemples :sum(DISTINCT x) (ou sumDistinct(x)), groupArray(DISTINCT x) (ou groupArrayDistinct(x)), corrStable(DISTINCT x, y) (ou corrStableDistinct(x, y)) et ainsi de suite.
-OrDefault
Modifie le comportement d’une fonction d’agrégation. Si une fonction d’agrégation ne reçoit aucune valeur en entrée, ce combinateur renvoie la valeur par défaut de son type de données de retour. S’applique aux fonctions d’agrégation qui peuvent accepter des données d’entrée vides.-OrDefault peut être utilisé avec d’autres combinateurs.
Syntaxe
x— Paramètres de la fonction d’agrégation.
Query
Response
-OrDefault peut également être utilisé avec d’autres combinateurs. Cela est utile lorsque la fonction d’agrégation n’accepte pas d’entrée vide.
Query
Response
-OrNull
Modifie le comportement d’une fonction d’agrégation. Ce combinateur convertit le résultat d’une fonction d’agrégation en type de données Nullable. Si la fonction d’agrégation n’a aucune valeur à calculer, elle renvoie NULL.-OrNull peut être utilisé avec d’autres combinateurs.
Syntaxe
x— Paramètres de la fonction d’agrégation.
- Le résultat de la fonction d’agrégation, converti en type de données
Nullable. NULLs’il n’y a rien à agréger.
Nullable(type de retour de la fonction d’agrégation).
Exemple
Ajoutez -orNull à la fin de la fonction d’agrégation.
Query
Response
-OrNull peut être utilisé avec d’autres combinateurs. Cela est utile lorsque la fonction d’agrégation n’accepte pas d’entrée vide.
Query
Response
-Resample
Permet de répartir les données en groupes, puis d’agréger séparément les données de chaque groupe. Les groupes sont créés en répartissant les valeurs d’une colonne en intervalles.start— Valeur de début de l’intervalle complet requis pour les valeurs deresampling_key.stop— Valeur de fin de l’intervalle complet requis pour les valeurs deresampling_key. L’intervalle complet n’inclut pas la valeurstop[start, stop). Elle doit être supérieure àstart: une plage ne couvrant aucun sous-intervalle lève une exception.step— Pas utilisé pour découper l’intervalle complet en sous-intervalles.aggFunctionest exécutée indépendamment sur chacun de ces sous-intervalles.resampling_key— Colonne dont les valeurs sont utilisées pour répartir les données en intervalles.aggFunction_params— Paramètres deaggFunction.
- Tableau des résultats de
aggFunctionpour chaque sous-intervalle.
people avec les données suivantes :
[30,60) et [60,75). Comme nous utilisons une représentation entière pour l’âge, nous obtenons les âges des intervalles [30, 59] et [60,74].
Pour agréger les noms dans un tableau, nous utilisons la fonction d’agrégation groupArray. Elle prend un argument. Dans notre cas, il s’agit de la colonne name. La fonction groupArrayResample doit utiliser la colonne age pour agréger les noms par âge. Pour définir les intervalles requis, nous passons les arguments 30, 75, 30 à la fonction groupArrayResample.
John ne figure pas dans l’échantillon parce qu’il est trop jeune. Les autres personnes sont réparties selon les tranches d’âge spécifiées.
Comptons maintenant le nombre total de personnes ainsi que leur salaire moyen dans les tranches d’âge spécifiées.
-ArgMin
Le suffixe -ArgMin peut être ajouté au nom de n’importe quelle fonction d’agrégation. Dans ce cas, la fonction d’agrégation accepte un argument supplémentaire, qui doit être une expression comparable. La fonction d’agrégation traite uniquement les lignes ayant la valeur minimale pour l’expression supplémentaire spécifiée. Exemples :sumArgMin(column, expr), countArgMin(expr), avgArgMin(x, expr), etc.