ClickHouse/docs/fr/engines/table-engines/mergetree-family/summingmergetree.md

142 lines
6.7 KiB
Markdown
Raw Normal View History

2020-03-30 12:48:55 +00:00
---
machine_translated: true
2020-04-04 09:15:31 +00:00
machine_translated_rev: f865c9653f9df092694258e0ccdd733c339112f5
toc_priority: 34
toc_title: SummingMergeTree
2020-03-30 12:48:55 +00:00
---
2020-04-04 09:15:31 +00:00
# Summingmergetree {#summingmergetree}
2020-03-30 12:48:55 +00:00
Le moteur hérite de [MergeTree](mergetree.md#table_engines-mergetree). La différence est que lors de la fusion de parties de données pour `SummingMergeTree` tables ClickHouse remplace toutes les lignes avec la même clé primaire (ou, plus précisément, avec la même [clé de tri](mergetree.md)) avec une ligne qui contient des valeurs résumées pour les colonnes avec le type de données numériques. Si la clé de tri est composée de telle sorte quune seule valeur de clé correspond à un grand nombre de lignes, cela réduit considérablement le volume de stockage et accélère la sélection des données.
2020-03-30 12:48:55 +00:00
Nous vous recommandons dutiliser le moteur avec `MergeTree`. Stocker des données complètes dans `MergeTree` table, et lutilisation `SummingMergeTree` pour le stockage de données agrégées, par exemple, lors de la préparation de rapports. Une telle approche vous empêchera de perdre des données précieuses en raison dune clé primaire mal composée.
2020-03-30 12:48:55 +00:00
## Création dune Table {#creating-a-table}
2020-03-30 12:48:55 +00:00
``` sql
CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster]
(
name1 [type1] [DEFAULT|MATERIALIZED|ALIAS expr1],
name2 [type2] [DEFAULT|MATERIALIZED|ALIAS expr2],
...
) ENGINE = SummingMergeTree([columns])
[PARTITION BY expr]
[ORDER BY expr]
[SAMPLE BY expr]
[SETTINGS name=value, ...]
```
Pour une description des paramètres de requête, voir [demande de description](../../../sql-reference/statements/create.md).
2020-03-30 12:48:55 +00:00
**Paramètres de SummingMergeTree**
- `columns` - un n-uplet avec les noms de colonnes où les valeurs seront résumées. Paramètre facultatif.
Les colonnes doivent être dun type numérique et ne doit pas être dans la clé primaire.
2020-03-30 12:48:55 +00:00
Si `columns` non spécifié, ClickHouse résume les valeurs dans toutes les colonnes avec un type de données numérique qui ne sont pas dans la clé primaire.
**Les clauses de requête**
Lors de la création dun `SummingMergeTree` la table de la même [clause](mergetree.md) sont nécessaires, comme lors de la création dun `MergeTree` table.
2020-03-30 12:48:55 +00:00
<details markdown="1">
<summary>Méthode obsolète pour créer une Table</summary>
!!! attention "Attention"
Nutilisez pas cette méthode dans les nouveaux projets et, si possible, remplacez les anciens projets par la méthode décrite ci-dessus.
2020-03-30 12:48:55 +00:00
``` sql
CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster]
(
name1 [type1] [DEFAULT|MATERIALIZED|ALIAS expr1],
name2 [type2] [DEFAULT|MATERIALIZED|ALIAS expr2],
...
) ENGINE [=] SummingMergeTree(date-column [, sampling_expression], (primary, key), index_granularity, [columns])
```
Tous les paramètres excepté `columns` ont la même signification que dans `MergeTree`.
- `columns` — tuple with names of columns values of which will be summarized. Optional parameter. For a description, see the text above.
</details>
## Exemple DUtilisation {#usage-example}
2020-03-30 12:48:55 +00:00
Considérons le tableau suivant:
``` sql
CREATE TABLE summtt
(
key UInt32,
value UInt32
)
ENGINE = SummingMergeTree()
ORDER BY key
```
Insérer des données:
``` sql
INSERT INTO summtt Values(1,1),(1,2),(2,1)
```
ClickHouse peut résumer toutes les lignes pas complètement ([voir ci-dessous](#data-processing)), nous utilisons donc une fonction dagrégation `sum` et `GROUP BY` la clause dans la requête.
2020-03-30 12:48:55 +00:00
``` sql
SELECT key, sum(value) FROM summtt GROUP BY key
```
``` text
┌─key─┬─sum(value)─┐
│ 2 │ 1 │
│ 1 │ 3 │
└─────┴────────────┘
```
## Le Traitement Des Données {#data-processing}
Lorsque les données sont insérées dans une table, elles sont enregistrées telles quelles. Clickhouse fusionne périodiquement les parties de données insérées et cest à ce moment que les lignes avec la même clé primaire sont additionnées et remplacées par une pour chaque partie de données résultante.
2020-03-30 12:48:55 +00:00
ClickHouse can merge the data parts so that different resulting parts of data cat consist rows with the same primary key, i.e. the summation will be incomplete. Therefore (`SELECT`) une fonction dagrégation [somme()](../../../sql-reference/aggregate-functions/reference.md#agg_function-sum) et `GROUP BY` la clause doit être utilisé dans une requête comme décrit dans lexemple ci-dessus.
2020-03-30 12:48:55 +00:00
2020-04-04 09:15:31 +00:00
### Règles Communes Pour La Sommation {#common-rules-for-summation}
2020-03-30 12:48:55 +00:00
Les valeurs dans les colonnes avec le type de données numériques sont résumées. Lensemble des colonnes est défini par le paramètre `columns`.
2020-03-30 12:48:55 +00:00
Si les valeurs étaient 0 dans toutes les colonnes pour la sommation, la ligne est supprimée.
Si la colonne nest pas dans la clé primaire et nest pas résumée, une valeur arbitraire est sélectionnée parmi celles existantes.
2020-03-30 12:48:55 +00:00
Les valeurs ne sont pas résumés des colonnes de la clé primaire.
### La Somme Dans Les Colonnes Aggregatefunction {#the-summation-in-the-aggregatefunction-columns}
2020-03-30 12:48:55 +00:00
Pour les colonnes de [Type AggregateFunction](../../../sql-reference/data-types/aggregatefunction.md) ClickHouse se comporte comme [AggregatingMergeTree](aggregatingmergetree.md) moteur dagrégation selon la fonction.
2020-03-30 12:48:55 +00:00
### Structures Imbriquées {#nested-structures}
Table peut avoir des structures de données imbriquées qui sont traitées dune manière spéciale.
2020-03-30 12:48:55 +00:00
Si le nom dune table imbriquée se termine avec `Map` et il contient au moins deux colonnes qui répondent aux critères suivants:
2020-03-30 12:48:55 +00:00
- la première colonne est numérique `(*Int*, Date, DateTime)` ou une chaîne de caractères `(String, FixedString)`, nous allons lappeler `key`,
- les autres colonnes sont arithmétique `(*Int*, Float32/64)`, nous allons lappeler `(values...)`,
2020-03-30 12:48:55 +00:00
ensuite, cette table imbriquée est interprétée comme un mappage de `key => (values...)` et lors de la fusion de ses lignes, les éléments de deux ensembles de données sont regroupées par `key` avec une sommation du correspondant `(values...)`.
Exemple:
``` text
[(1, 100)] + [(2, 150)] -> [(1, 100), (2, 150)]
[(1, 100)] + [(1, 150)] -> [(1, 250)]
[(1, 100)] + [(1, 150), (2, 150)] -> [(1, 250), (2, 150)]
[(1, 100), (2, 150)] + [(1, -100)] -> [(2, 150)]
```
Lorsque vous demandez des données, utilisez [sumMap (clé, valeur)](../../../sql-reference/aggregate-functions/reference.md) fonction pour lagrégation de `Map`.
2020-03-30 12:48:55 +00:00
Pour la structure de données imbriquée, vous navez pas besoin de spécifier ses colonnes dans le tuple de colonnes pour la sommation.
2020-03-30 12:48:55 +00:00
[Article Original](https://clickhouse.tech/docs/en/operations/table_engines/summingmergetree/) <!--hide-->