Перейти к основному содержанию

Описание

Тип данных SimpleAggregateFunction хранит промежуточное состояние агрегатной функции, но не её полное состояние, в отличие от типа AggregateFunction. Эту оптимизацию можно применять к функциям, для которых выполняется следующее свойство:
результат применения функции f к набору строк S1 UNION ALL S2 можно получить, если применить f к частям этого набора строк по отдельности, а затем ещё раз применить f к полученным результатам: f(S1 UNION ALL S2) = f(f(S1) UNION ALL f(S2)).
Это свойство гарантирует, что частичных результатов агрегации достаточно для вычисления общего результата, поэтому не требуется хранить и обрабатывать дополнительные данные. Например, для функций min или max не нужны дополнительные шаги, чтобы получить окончательный результат из промежуточных, тогда как для функции avg нужно отслеживать сумму и количество, которые затем делятся для получения среднего значения на финальном этапе Merge, объединяющем промежуточные состояния. Значения агрегатной функции обычно получают, вызывая агрегатную функцию с комбинатором -SimpleState, добавленным к имени функции.

Синтаксис

SimpleAggregateFunction(aggregate_function_name, types_of_arguments...)
Параметры
  • aggregate_function_name - Имя агрегатной функции.
  • Type - Типы аргументов агрегатной функции.

Поддерживаемые функции

Поддерживаются следующие агрегатные функции:
Значения SimpleAggregateFunction(func, Type) имеют тот же Type, поэтому, в отличие от типа AggregateFunction, применять комбинаторы -Merge/-State не требуется.Тип SimpleAggregateFunction обеспечивает более высокую производительность, чем AggregateFunction, для тех же агрегатных функций.

Пример

CREATE TABLE simple (id UInt64, val SimpleAggregateFunction(sum, Double)) ENGINE=AggregatingMergeTree ORDER BY id;
Последнее изменение 10 июня 2026 г.