mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-11-17 13:13:36 +00:00
0a4a5b36cc
* Additional .gitignore entries * Merge a bunch of small articles about system tables into single one * Merge a bunch of small articles about formats into single one * Adapt table with formats to English docs too * Add SPb meetup link to main page * Move Utilities out of top level of docs (the location is probably not yet final) + translate couple articles * Merge MacOS.md into build_osx.md * Move Data types higher in ToC * Publish changelog on website alongside documentation * Few fixes for en/table_engines/file.md * Use smaller header sizes in changelogs * Group up table engines inside ToC * Move table engines out of top level too * Specificy in ToC that query language is SQL based. Thats a bit excessive, but catches eye. * Move stuff that is part of query language into respective folder * Move table functions lower in ToC * Lost redirects.txt update * Do not rely on comments in yaml + fix few ru titles * Extract major parts of queries.md into separate articles * queries.md has been supposed to be removed * Fix weird translation * Fix a bunch of links * There is only table of contents left * "Query language" is actually part of SQL abbreviation * Change filename in README.md too * fix mistype
45 lines
3.9 KiB
Markdown
45 lines
3.9 KiB
Markdown
# 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).
|
||
|
||
Для вложенных структур данных не нужно указывать её столбцы в качестве списка столбцов для суммирования.
|
||
|
||
Этот движок таблиц разработан по просьбе БК, и является мало полезным. Помните, что при хранении лишь предагрегированных данных, вы теряете часть преимуществ системы.
|