Descrição
O tipo de dado 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ção
fa 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)).
Essa 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ções 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
SimpleAggregateFunction(aggregate_function_name, types_of_arguments...)Parâmetros
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
As seguintes funções de agregação são compatíveis:
anyany_respect_nullsanyLastanyLast_respect_nullsminmaxsumsumWithOverflowgroupBitAndgroupBitOrgroupBitXorgroupArrayArraygroupUniqArrayArraygroupUniqArrayArrayMapsumMap(sumMappedArrays)minMap(minMappedArrays)maxMap(maxMappedArrays)
Exemplo
CREATE TABLE simple (id UInt64, val SimpleAggregateFunction(sum, Double)) ENGINE=AggregatingMergeTree ORDER BY id;