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