Тип 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- Типы аргументов агрегатной функции.
Поддерживаемые функции
Поддерживаются следующие агрегатные функции:
- any
- any_respect_nulls
- anyLast
- anyLast_respect_nulls
- min
- max
- sum
- sumWithOverflow
- groupBitAnd
- groupBitOr
- groupBitXor
- groupArrayArray
- groupUniqArrayArray
- groupUniqArrayArrayMap
- sumMap
- minMap
- maxMap
Значения SimpleAggregateFunction(func, Type) имеют тот же Type,
поэтому в отличие от типа AggregateFunction нет необходимости применять
комбинаторы -Merge/-State.
Тип SimpleAggregateFunction имеет лучшую производительность, чем AggregateFunction
для одних и тех же агрегатных функций.
