SimpleAggregateFunction(func, type)
Хранит только текущее значение агрегатной функции и не сохраняет ее полное состояние, как это делает 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
sumMap
minMap
maxMap
Параметры
func
— имя агрегатной функции.type
— типы аргументов агрегатной функции.
Пример
CREATE TABLE simple (id UInt64, val SimpleAggregateFunction(sum, Double)) ENGINE=AggregatingMergeTree ORDER BY id;