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

Тип SimpleAggregateFunction

Описание

Тип данных 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;