Passer au contenu principal

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ées AggregateFunction 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édiaires AggregateFunction.
  • 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

AggregateFunction(aggregate_function_name, types_of_arguments...)
Paramètres
  • 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.
par exemple :
CREATE TABLE t
(
    column1 AggregateFunction(uniq, UInt64),
    column2 AggregateFunction(anyIf, String, UInt8),
    column3 AggregateFunction(quantiles(0.5, 0.9), UInt64)
) ENGINE = ...

Utilisation

Insertion de données

Pour insérer des données dans une table dont les colonnes sont de type AggregateFunction, 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.
uniqState(UserID)
quantilesState(0.5, 0.9)(SendTiming)
Contrairement aux fonctions 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 - chaîne binaire contenant l’état sérialisé (par défaut). Si vous exportez des données, par exemple au format TabSeparated, avec une requête SELECT, cet export peut ensuite être rechargé à l’aide d’une requête INSERT.
  • 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 ; celle-ci sera désérialisée pour former l’état correspondant
  • array - le format attend un Array de valeurs, comme décrit dans l’option value ci-dessus ; tous les éléments de l’Array seront agrégés pour former l’état

Sélection des données

Lorsque vous sélectionnez des données dans une table AggregatingMergeTree, 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 :
SELECT uniq(UserID) FROM table

SELECT uniqMerge(state) FROM (SELECT uniqState(UserID) AS state FROM table GROUP BY RegionID)

Exemple d’utilisation

Voir la description du moteur AggregatingMergeTree.
Dernière modification le 25 juin 2026