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