SimpleAggregateFunction(func, type)
Хранит только текущее значение агрегатной функции и не сохраняет ее полное состояние, как это делает AggregateFunction
. Такая оптимизация может быть применена к функциям, которые обладают следующим свойством: результат выполнения функции f
к набору строк S1 UNION ALL S2
может быть получен путем выполнения f
к отдельным частям набора строк,
а затем повторного выполнения f
к результатам: f(S1 UNION ALL S2) = f(f(S1) UNION ALL f(S2))
. Это свойство гарантирует, что результатов частичной агрегации достаточно для вычисления комбинированной, поэтому хранить и обрабатывать какие-либо дополнительные данные не требуется.
Чтобы получить промежуточное значение, обычно используются агрегатные функции с суффиксом -SimpleState.
Поддерживаются следующие агрегатные функции:
:::note "Примечание"
Значения `SimpleAggregateFunction(func, Type)` отображаются и хранятся так же, как и `Type`, поэтому комбинаторы [-Merge](/docs/ru/sql-reference/aggregate-functions/combinators#aggregate_functions_combinators-merge) и [-State](/docs/ru/sql-reference/aggregate-functions/combinators#agg-functions-combinator-state) не требуются.
`SimpleAggregateFunction` имеет лучшую производительность, чем `AggregateFunction` с той же агрегатной функцией.
:::Параметры
func
— имя агрегатной функции.type
— типы аргументов агрегатной функции.
Пример
CREATE TABLE simple (id UInt64, val SimpleAggregateFunction(sum, Double)) ENGINE=AggregatingMergeTree ORDER BY id;