Skip to main content

SimpleAggregateFunction(func, type)

Хранит только текущее значение агрегатной функции и не сохраняет ее полное состояние, как это делает AggregateFunction. Такая оптимизация может быть применена к функциям, которые обладают следующим свойством: результат выполнения функции f к набору строк S1 UNION ALL S2 может быть получен путем выполнения f к отдельным частям набора строк, а затем повторного выполнения f к результатам: f(S1 UNION ALL S2) = f(f(S1) UNION ALL f(S2)). Это свойство гарантирует, что результатов частичной агрегации достаточно для вычисления комбинированной, поэтому хранить и обрабатывать какие-либо дополнительные данные не требуется.

Чтобы получить промежуточное значение, обычно используются агрегатные функции с суффиксом -SimpleState.

Поддерживаются следующие агрегатные функции:

Примечание

Значения SimpleAggregateFunction(func, Type) отображаются и хранятся так же, как и Type, поэтому комбинаторы -Merge и -State не требуются.

SimpleAggregateFunction имеет лучшую производительность, чем AggregateFunction с той же агрегатной функцией.

Параметры

  • func — имя агрегатной функции.
  • type — типы аргументов агрегатной функции.

Пример

CREATE TABLE simple (id UInt64, val SimpleAggregateFunction(sum, Double)) ENGINE=AggregatingMergeTree ORDER BY id;