mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-11-14 19:45:11 +00:00
47 lines
3.8 KiB
Markdown
47 lines
3.8 KiB
Markdown
<a name="table_engine-summingmergetree"></a>
|
||
|
||
# SummingMergeTree
|
||
|
||
Отличается от `MergeTree` тем, что суммирует данные при слиянии.
|
||
|
||
```sql
|
||
SummingMergeTree(EventDate, (OrderID, EventDate, BannerID, ...), 8192)
|
||
```
|
||
|
||
Столбцы для суммирования заданы неявно. При слиянии, для всех строчек с одинаковым значением первичного ключа (в примере - OrderID, EventDate, BannerID, ...), производится суммирование значений в числовых столбцах, не входящих в первичный ключ.
|
||
|
||
```sql
|
||
SummingMergeTree(EventDate, (OrderID, EventDate, BannerID, ...), 8192, (Shows, Clicks, Cost, ...))
|
||
```
|
||
|
||
Явно заданные столбцы для суммирования (последний параметр - Shows, Clicks, Cost, ...). При слиянии, для всех строчек с одинаковым значением первичного ключа, производится суммирование значений в указанных столбцах. Указанные столбцы также должны быть числовыми и не входить в первичный ключ.
|
||
|
||
Если значения во всех таких столбцах оказались нулевыми, то строчка удаляется.
|
||
|
||
Для остальных столбцов, не входящих в первичный ключ, при слиянии выбирается первое попавшееся значение. Но для столбцов типа AggregateFunction выполняется агрегация согласно заданной функции, так что этот движок фактически ведёт себя как `AggregatingMergeTree`.
|
||
|
||
При чтении, суммирование не делается само по себе. Если оно необходимо - напишите соответствующий GROUP BY.
|
||
|
||
Дополнительно, таблица может иметь вложенные структуры данных, которые обрабатываются особым образом.
|
||
Если название вложенной таблицы заканчивается на Map и она содержит не менее двух столбцов, удовлетворяющих следующим критериям:
|
||
|
||
- первый столбец - числовой ((U)IntN, Date, DateTime), назовем его условно key,
|
||
- остальные столбцы - арифметические ((U)IntN, Float32/64), условно (values...),
|
||
|
||
то такая вложенная таблица воспринимается как отображение key `=>` (values...) и при слиянии ее строк выполняется слияние элементов двух множеств по key со сложением соответствующих (values...).
|
||
|
||
Примеры:
|
||
|
||
```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)]
|
||
```
|
||
|
||
Для агрегации Map используйте функцию sumMap(key, value).
|
||
|
||
Для вложенных структур данных не нужно указывать её столбцы в качестве списка столбцов для суммирования.
|
||
|
||
Этот движок таблиц разработан по просьбе БК, и является мало полезным. Помните, что при хранении лишь предагрегированных данных, вы теряете часть преимуществ системы.
|