Описание
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, добавленным к имени функции.
Синтаксис
aggregate_function_name- Имя агрегатной функции.Type- Типы аргументов агрегатной функции.
Поддерживаемые функции
anyany_respect_nullsanyLastanyLast_respect_nullsminmaxsumsumWithOverflowgroupBitAndgroupBitOrgroupBitXorgroupArrayArraygroupUniqArrayArraygroupUniqArrayArrayMapsumMap(sumMappedArrays)minMap(minMappedArrays)maxMap(maxMappedArrays)
Значения
SimpleAggregateFunction(func, Type) имеют тот же Type,
поэтому, в отличие от типа AggregateFunction, применять
комбинаторы -Merge/-State не требуется.Тип SimpleAggregateFunction обеспечивает более высокую производительность, чем AggregateFunction,
для тех же агрегатных функций.