SummingMergeTree ClickHouse заменяет все строки с одинаковым первичным ключом (или, точнее, с одинаковым ключом сортировки) одной строкой, содержащей суммарные значения в столбцах с числовым типом данных. Если ключ сортировки устроен так, что одному значению ключа соответствует большое количество строк, это значительно уменьшает объем хранимых данных и ускоряет выборку.
Мы рекомендуем использовать этот движок вместе с MergeTree. Храните полные данные в таблице MergeTree, а SummingMergeTree используйте для хранения агрегированных данных, например при подготовке отчетов. Такой подход поможет избежать потери ценных данных из-за неправильно составленного первичного ключа.
Создание таблицы
Параметры SummingMergeTree
Столбцы
columns — кортеж с именами столбцов, по которым будут суммироваться значения. Необязательный параметр.
Столбцы должны иметь числовой тип и не входить в партицию или ключ сортировки.
Если columns не указан, ClickHouse суммирует значения во всех столбцах с числовым типом данных, которые не входят в ключ сортировки.
Секции запроса
SummingMergeTree требуются те же секции, что и при создании таблицы MergeTree.
Пример использования
sum и предложение GROUP BY.
Обработка данных
SELECT) агрегатную функцию sum() и GROUP BY, как описано в примере выше.
Общие правила суммирования
columns.
Если во всех столбцах, участвующих в суммировании, значения равны 0, строка удаляется.
Если столбец не входит в первичный ключ и не суммируется, из существующих значений выбирается произвольное.
Для столбцов, входящих в первичный ключ, значения не суммируются.
Суммирование в столбцах AggregateFunction
Вложенные структуры
Map и она содержит как минимум два столбца, удовлетворяющих следующим критериям:
- первый столбец — числовой
(*Int*, Date, DateTime)или строковый(String, FixedString), назовём егоkey, - остальные столбцы — арифметические
(*Int*, Float32/64), назовём их(values...),
key => (values...), и при слиянии её строк элементы двух наборов данных объединяются по key с суммированием соответствующих (values...).
Примеры:
Map.
Для вложенной структуры данных не нужно указывать её столбцы в кортеже столбцов, используемом для суммирования.
Агрегация элементов Tuple
allow_tuple_element_aggregation включена, столбцы Tuple рекурсивно разворачиваются, так что каждый конечный элемент независимо участвует в суммировании. Это позволяет хранить несколько метрик в одном столбце Tuple, а при слиянии они будут суммироваться поэлементно.
К развёрнутым подстолбцам применяются те же правила, что и к обычным столбцам:
- Суммируются только числовые подстолбцы.
- Подстолбцы, входящие в
Tupleв ключе сортировки или ключе партиционирования, исключаются из суммирования. - Если указан
columns, суммируются только подстолбцы перечисленных столбцовTuple. - Если после суммирования все числовые подстолбцы строки равны нулю, строка удаляется.
Эта настройка неизменяема и должна быть указана при создании таблицы.