Перейти к основному содержанию
Движок наследуется от MergeTree. Отличие состоит в том, что при слиянии частей данных в таблицах SummingMergeTree ClickHouse заменяет все строки с одинаковым первичным ключом (или, точнее, с одинаковым ключом сортировки) одной строкой, содержащей суммарные значения в столбцах с числовым типом данных. Если ключ сортировки устроен так, что одному значению ключа соответствует большое количество строк, это значительно уменьшает объем хранимых данных и ускоряет выборку. Мы рекомендуем использовать этот движок вместе с MergeTree. Храните полные данные в таблице MergeTree, а SummingMergeTree используйте для хранения агрегированных данных, например при подготовке отчетов. Такой подход поможет избежать потери ценных данных из-за неправильно составленного первичного ключа.

Создание таблицы

Описание параметров запроса см. в разделе Описание запроса.

Параметры SummingMergeTree

Столбцы

columns — кортеж с именами столбцов, по которым будут суммироваться значения. Необязательный параметр. Столбцы должны иметь числовой тип и не входить в партицию или ключ сортировки. Если columns не указан, ClickHouse суммирует значения во всех столбцах с числовым типом данных, которые не входят в ключ сортировки.

Секции запроса

При создании таблицы SummingMergeTree требуются те же секции, что и при создании таблицы MergeTree.

Пример использования

Рассмотрим следующую таблицу:
Вставьте в неё данные:
ClickHouse может суммировать строки не полностью (см. ниже), поэтому в запросе мы используем агрегатную функцию sum и предложение GROUP BY.

Обработка данных

Когда данные вставляются в таблицу, они сохраняются как есть. ClickHouse периодически выполняет слияние вставленных частей данных, и именно в этот момент строки с одинаковым первичным ключом суммируются и заменяются одной строкой в каждой результирующей части данных. ClickHouse может выполнять слияние частей данных так, что разные результирующие части данных могут содержать строки с одинаковым первичным ключом, то есть суммирование будет неполным. Поэтому в запросе следует использовать (SELECT) агрегатную функцию sum() и GROUP BY, как описано в примере выше.

Общие правила суммирования

Суммируются значения в столбцах с числовым типом данных. Набор столбцов задаётся параметром columns. Если во всех столбцах, участвующих в суммировании, значения равны 0, строка удаляется. Если столбец не входит в первичный ключ и не суммируется, из существующих значений выбирается произвольное. Для столбцов, входящих в первичный ключ, значения не суммируются.

Суммирование в столбцах AggregateFunction

Для столбцов типа AggregateFunction ClickHouse работает как движок AggregatingMergeTree, выполняя агрегацию в соответствии с функцией.

Вложенные структуры

Таблица может иметь вложенные структуры данных, которые обрабатываются особым образом. Если имя вложенной таблицы оканчивается на Map и она содержит как минимум два столбца, удовлетворяющих следующим критериям:
  • первый столбец — числовой (*Int*, Date, DateTime) или строковый (String, FixedString), назовём его key,
  • остальные столбцы — арифметические (*Int*, Float32/64), назовём их (values...),
то такая вложенная таблица интерпретируется как отображение key => (values...), и при слиянии её строк элементы двух наборов данных объединяются по key с суммированием соответствующих (values...). Примеры:
При запросе данных используйте функцию sumMap(key, value) для агрегации Map. Для вложенной структуры данных не нужно указывать её столбцы в кортеже столбцов, используемом для суммирования.
Последнее изменение 12 июня 2026 г.