Description
Toutes les fonctions d’agrégation de ClickHouse possèdent un état intermédiaire propre à leur implémentation, qui peut être sérialisé dans un type de donnéesAggregateFunction et stocké dans une table. Cela se fait généralement
au moyen d’une vue matérialisée.
Il existe deux combinateurs
de fonctions d’agrégation couramment utilisés avec le type AggregateFunction :
- Le combinateur de fonction d’agrégation
-State, qui, lorsqu’il est ajouté au nom d’une fonction d’agrégation, produit des états intermédiairesAggregateFunction. - Le combinateur de fonction d’agrégation
-Merge, qui permet d’obtenir le résultat final d’une agrégation à partir des états intermédiaires.
Syntaxe
aggregate_function_name- Le nom d’une fonction d’agrégation. Si la fonction est paramétrique, ses paramètres doivent également être indiqués.types_of_arguments- Les types des arguments de la fonction d’agrégation.
Utilisation
Insertion de données
Pour insérer des données dans une table dont les colonnes sont de typeAggregateFunction, vous pouvez
utiliser INSERT SELECT avec des fonctions d’agrégation et le
combinateur de fonction d’agrégation
-State.
Par exemple, pour insérer des données dans des colonnes de type AggregateFunction(uniq, UInt64) et
AggregateFunction(quantiles(0.5, 0.9), UInt64), utilisez les
fonctions d’agrégation suivantes avec des combinateurs.
uniq et quantiles, uniqState et quantilesState
(avec le combinateur -State ajouté) renvoient l’état plutôt que la valeur finale.
Autrement dit, elles renvoient une valeur de type AggregateFunction.
Dans les résultats de la requête SELECT, les valeurs de type AggregateFunction ont
des représentations binaires spécifiques à l’implémentation dans tous les formats de sortie
de ClickHouse.
Il existe un paramètre spécial au niveau de la session, aggregate_function_input_format, qui permet de construire l’état à partir des valeurs d’entrée.
Il prend en charge les formats suivants :
state- l’état sérialisé (par défaut). Si vous exportez des données, par exemple au formatTabSeparated, avec une requêteSELECT, cet export peut ensuite être rechargé à l’aide d’une requêteINSERT.value- le format attend une seule valeur de l’argument de la fonction d’agrégation ou, dans le cas de plusieurs arguments, un tuple de ces valeurs ; la valeur est agrégée pour former l’état.array- le format attend un Array de valeurs, comme décrit dans l’optionvalueci-dessus ; tous les éléments de l’Array sont agrégés pour former l’état.
value et array, la colonne est lue comme si elle avait le type des valeurs (T, Tuple(T1, T2), ou un Array de ceux-ci),
dans la représentation que le format d’entrée utilise pour ce type. Cela fonctionne de la même manière dans tous les formats d’entrée, de CSV et JSONEachRow à RowBinary et Parquet.
Sélection des données
Lorsque vous sélectionnez des données dans une tableAggregatingMergeTree, utilisez la clause GROUP BY
et les mêmes fonctions d’agrégation que lors de l’insertion des données, mais avec le
combinateur -Merge.
Une fonction d’agrégation à laquelle on ajoute le combinateur -Merge prend un ensemble
d’états, les combine et renvoie le résultat de l’agrégation complète des données.
Par exemple, les deux requêtes suivantes renvoient le même résultat :
Exemple d’utilisation
Voir la description du moteur AggregatingMergeTree.Contenu connexe
- Blog : Utiliser les combinateurs d’agrégation dans ClickHouse
- Combinateur MergeState.
- Combinateur State.