Тип 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
для одних и тех же агрегатных функций.