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