SimpleAggregateFunction
SimpleAggregateFunction(name, types_of_arguments...)
— тип данных, который хранит текущее значение (промежуточное состояние) агрегатной функции, но не её полное состояние, как это делает AggregateFunction
. Эта оптимизация может быть применена к функциям, для которых выполняется следующее свойство: результат применения функции f
к набору строк S1 UNION ALL S2
может быть получен путем применения f
к частям набора строк отдельно, а затем снова применения f
к результатам: f(S1 UNION ALL S2) = f(f(S1) UNION ALL f(S2))
. Это свойство гарантирует, что частичных результатов агрегации достаточно для вычисления комбинированного, поэтому нам не нужно хранить и обрабатывать дополнительные данные.
Общий способ получения значения агрегатной функции — это вызов агрегатной функции с суффиксом -SimpleState.
Поддерживаются следующие агрегатные функции:
any
anyLast
min
max
sum
sumWithOverflow
groupBitAnd
groupBitOr
groupBitXor
groupArrayArray
groupUniqArrayArray
groupUniqArrayArrayMap
sumMap
minMap
maxMap
Значения SimpleAggregateFunction(func, Type)
выглядят и хранятся так же, как и Type
, так что вам не нужно применять функции с суффиксами -Merge
/-State
.
SimpleAggregateFunction
имеет лучшую производительность, чем AggregateFunction
с той же агрегатной функцией.
Параметры
- Имя агрегатной функции.
- Типы аргументов агрегатной функции.
Пример