Pular para o conteúdo principal

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 f a um conjunto de linhas S1 UNION ALL S2 pode ser obtido aplicando f separadamente a partes do conjunto de linhas e, em seguida, aplicando f novamente 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:
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.

Exemplo

CREATE TABLE simple (id UInt64, val SimpleAggregateFunction(sum, Double)) ENGINE=AggregatingMergeTree ORDER BY id;
Última modificação em 10 de junho de 2026