AggregatingMergeTree pour l’agrégation incrémentielle des données, notamment pour les vues matérialisées agrégées.
Vous trouverez ci-dessous une vidéo montrant comment utiliser AggregatingMergeTree et les fonctions d’agrégation :
AggregatingMergeTree si cela réduit le nombre de lignes de plusieurs ordres de grandeur.
Créer une table
AggregatingMergeTree, les mêmes clauses sont requises que pour la création d’une table MergeTree.
SELECT and INSERT
-State-.
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 suffixe -Merge.
Dans les résultats d’une requête SELECT, les valeurs de type AggregateFunction ont une représentation binaire spécifique à l’implémentation dans tous les formats de sortie de ClickHouse. Par exemple, si vous exportez des données au format TabSeparated avec une requête SELECT, cet export peut ensuite être rechargé à l’aide d’une requête INSERT.
Exemple de vue matérialisée agrégée
test. Créez-la si elle n’existe pas encore à l’aide de la commande ci-dessous :
test.visits qui contient les données brutes :
AggregatingMergeTree qui stockera des AggregationFunctions chargées de suivre le nombre total de visites et le nombre d’utilisateurs uniques.
Créez une vue matérialisée AggregatingMergeTree qui surveille la table test.visits et utilise le type AggregateFunction :
test.agg_visits à partir de test.visits :
test.visits :
test.visits et test.agg_visits.
Pour récupérer les données agrégées, exécutez une requête telle que SELECT ... GROUP BY ... depuis la vue matérialisée test.visits_mv :
test.visits, mais cette fois en utilisant un timestamp différent pour l’un des enregistrements :
SELECT, qui renverra la sortie suivante :
GROUP BY
de la définition de la vue matérialisée pour éviter une erreur. Vous pouvez cependant utiliser la fonction initializeAggregation
avec le paramètre optimize_on_insert = 0 (activé par défaut) pour y parvenir. L’utilisation de GROUP BY
n’est alors plus nécessaire :
Lors de l’utilisation de
initializeAggregation, un état d’agrégation est créé pour chaque ligne, sans regroupement.
Chaque ligne source produit une ligne dans la vue matérialisée, et l’agrégation proprement dite a lieu plus tard, lorsque
AggregatingMergeTree fusionne les parts. Cela n’est vrai que si optimize_on_insert = 0.Agrégation des éléments de Tuple
allow_tuple_element_aggregation est activé, les colonnes Tuple sont aplaties récursivement afin que chaque élément terminal participe indépendamment à l’agrégation. Cela signifie que les sous-colonnes AggregateFunction ou SimpleAggregateFunction à l’intérieur d’un Tuple sont agrégées selon leurs fonctions respectives, comme s’il s’agissait de colonnes de premier niveau.
Les sous-colonnes appartenant à un Tuple dans la clé de tri sont exclues de l’agrégation. Les sous-colonnes non agrégées sont traitées comme des colonnes ordinaires (leur première valeur est conservée).
Ce paramètre est immuable et doit être spécifié lors de la création de la table.
total_visits est agrégé à l’aide de sum (100 + 200 = 300), tandis que unique_users est agrégé à l’aide de max (max(5, 8) = 8).