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

Тип 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, добавленным к имени функции.

Синтаксис

Параметры

  • aggregate_function_name - Название агрегатной функции.
  • Type - Типы аргументов агрегатной функции.

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

Поддерживаются следующие агрегатные функции:

примечание

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

Тип SimpleAggregateFunction имеет лучшую производительность, чем AggregateFunction для одних и тех же агрегатных функций.

Пример