SummingMergeTree, ClickHouse remplace toutes les lignes ayant la même clé primaire (ou, plus précisément, la même clé de tri) par une seule ligne contenant les valeurs additionnées des colonnes de type de données numérique. Si la clé de tri est définie de sorte qu’une même valeur de clé corresponde à un grand nombre de lignes, cela réduit considérablement le volume de stockage et accélère la sélection des données.
Nous recommandons d’utiliser ce moteur avec MergeTree. Stockez les données complètes dans une table MergeTree et utilisez SummingMergeTree pour stocker des données agrégées, par exemple pour préparer des rapports. Cette approche vous évitera de perdre des données précieuses à cause d’une clé primaire mal définie.
Créer une table
Paramètres de SummingMergeTree
Colonnes
columns - un tuple contenant les noms des colonnes dont les valeurs seront additionnées. Paramètre facultatif.
Les colonnes doivent être de type numérique et ne doivent pas faire partie de la partition ni de la clé de tri.
Si columns n’est pas spécifié, ClickHouse additionne les valeurs de toutes les colonnes de type numérique qui ne font pas partie de la clé de tri.
Clauses de requête
SummingMergeTree, les mêmes clauses sont requises que pour la création d’une table MergeTree.
Exemple d’utilisation
sum et la clause GROUP BY dans la requête.
Traitement des données
SELECT) une fonction d’agrégation sum() et la clause GROUP BY, comme décrit dans l’exemple ci-dessus.
Règles générales de sommation
columns.
Si les valeurs sont égales à 0 dans toutes les colonnes à sommer, la ligne est supprimée.
Si une colonne ne fait pas partie de la clé primaire et n’est pas additionnée, une valeur arbitraire est choisie parmi les valeurs existantes.
Les valeurs des colonnes de la clé primaire ne sont pas additionnées.
La sommation dans les colonnes AggregateFunction
Structures imbriquées
Map et qu’elle contient au moins deux colonnes répondant aux critères suivants :
- la première colonne est numérique
(*Int*, Date, DateTime)ou de type chaîne(String, FixedString), appelons-lakey, - les autres colonnes sont arithmétiques
(*Int*, Float32/64), appelons-les(values...),
key => (values...), et lors de la fusion de ses lignes, les éléments de deux ensembles de données sont fusionnés par key, avec addition des (values...) correspondantes.
Exemples :
Map.
Pour une structure de données imbriquée, vous n’avez pas besoin de spécifier ses colonnes dans le tuple des colonnes à sommer.
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 à la sommation. Cela permet de stocker plusieurs métriques dans une seule colonne Tuple et de les additionner élément par élément lors des fusions.
Les mêmes règles s’appliquent aux sous-colonnes aplaties qu’aux colonnes ordinaires :
- Seules les sous-colonnes numériques sont additionnées.
- Les sous-colonnes appartenant à un
Tupledans la clé de tri ou la clé de partition sont exclues de la sommation. - Si
columnsest spécifié, seules les sous-colonnes des colonnesTuplerépertoriées sont additionnées. - Si toutes les sous-colonnes numériques d’une ligne valent zéro après la sommation, la ligne est supprimée.
Ce paramètre est immuable et doit être défini au moment de la création de la table.