Descrição
SimpleAggregateFunction armazena o estado intermediário de uma
função de agregação, mas não seu estado completo, como faz o tipo
AggregateFunction.
Essa otimização pode ser aplicada a funções para as quais a seguinte propriedade
vale:
o resultado de aplicar uma funçãoEssa propriedade garante que resultados parciais de agregação são suficientes para calcular o resultado combinado, portanto não é necessário armazenar nem processar dados extras. Por exemplo, o resultado das funçõesfa um conjunto de linhasS1 UNION ALL S2pode ser obtido aplicandofseparadamente a partes do conjunto de linhas e, em seguida, aplicandofnovamente aos resultados:f(S1 UNION ALL S2) = f(f(S1) UNION ALL f(S2)).
min ou max não exige etapas adicionais para
calcular o resultado final a partir das etapas intermediárias, enquanto a função avg
exige manter o controle de uma soma e de uma contagem, que serão divididas para obter a
média em uma etapa final de Merge, que combina os estados intermediários.
Valores de funções de agregação geralmente são produzidos ao chamar uma função de agregação
com o combinador -SimpleState anexado ao nome da função.
Sintaxe
aggregate_function_name- O nome de uma função de agregação.Type- Tipos dos argumentos da função de agregação.
Funções compatíveis
anyany_respect_nullsanyLastanyLast_respect_nullsminmaxsumsumWithOverflowgroupBitAndgroupBitOrgroupBitXorgroupArrayArraygroupUniqArrayArraygroupUniqArrayArrayMapsumMap(sumMappedArrays)minMap(minMappedArrays)maxMap(maxMappedArrays)
Os valores de
SimpleAggregateFunction(func, Type) têm o mesmo Type,
portanto, ao contrário do tipo AggregateFunction, não é necessário aplicar
os combinadores -Merge/-State.O tipo SimpleAggregateFunction tem desempenho melhor que AggregateFunction
para as mesmas funções de agregação.