Описание
Тип данных SimpleAggregateFunction хранит промежуточное состояние
агрегатной функции, но не её полное состояние, в отличие от типа
AggregateFunction.
Эту оптимизацию можно применять к функциям, для которых выполняется следующее свойство:
результат применения функции
fк набору строкS1 UNION ALL S2можно получить, если применитьfк частям этого набора строк по отдельности, а затем ещё раз применитьfк полученным результатам:f(S1 UNION ALL S2) = f(f(S1) UNION ALL f(S2)).
Это свойство гарантирует, что частичных результатов агрегации достаточно для вычисления
общего результата, поэтому не требуется хранить и обрабатывать дополнительные данные. Например,
для функций min или max не нужны дополнительные шаги, чтобы получить
окончательный результат из промежуточных, тогда как для функции avg
нужно отслеживать сумму и количество, которые затем делятся для получения
среднего значения на финальном этапе Merge, объединяющем промежуточные состояния.
Значения агрегатной функции обычно получают, вызывая агрегатную функцию
с комбинатором -SimpleState, добавленным к имени функции.
Синтаксис
SimpleAggregateFunction(aggregate_function_name, types_of_arguments...)Параметры
aggregate_function_name- Имя агрегатной функции.Type- Типы аргументов агрегатной функции.
Поддерживаемые функции
Поддерживаются следующие агрегатные функции:
anyany_respect_nullsanyLastanyLast_respect_nullsminmaxsumsumWithOverflowgroupBitAndgroupBitOrgroupBitXorgroupArrayArraygroupUniqArrayArraygroupUniqArrayArrayMapsumMap(sumMappedArrays)minMap(minMappedArrays)maxMap(maxMappedArrays)
Пример
CREATE TABLE simple (id UInt64, val SimpleAggregateFunction(sum, Double)) ENGINE=AggregatingMergeTree ORDER BY id;