Todas as funções de agregação do ClickHouse têm
um estado intermediário específico da implementação, que pode ser serializado em um
tipo de dados AggregateFunction e armazenado em uma tabela. Isso geralmente é feito por
meio de uma visão materializada.
Há dois combinadores de função de agregação
comumente usados com o tipo AggregateFunction:
- O combinador de função de agregação
-State, que, quando anexado ao nome de uma função de agregação,
produz estados intermediários AggregateFunction.
- O combinador de função de agregação
-Merge,
usado para obter o resultado final de uma agregação
a partir dos estados intermediários.
AggregateFunction(aggregate_function_name, types_of_arguments...)
Parâmetros
aggregate_function_name - O nome de uma função de agregação. Se a função
for paramétrica, seus parâmetros também deverão ser especificados.
types_of_arguments - Os tipos dos argumentos da função de agregação.
por exemplo:
CREATE TABLE t
(
column1 AggregateFunction(uniq, UInt64),
column2 AggregateFunction(anyIf, String, UInt8),
column3 AggregateFunction(quantiles(0.5, 0.9), UInt64)
) ENGINE = ...
Para inserir dados em uma tabela com colunas do tipo AggregateFunction, você pode
usar INSERT SELECT com funções de agregação e o
combinador de funções de agregação
-State.
Por exemplo, para inserir dados em colunas do tipo AggregateFunction(uniq, UInt64) e
AggregateFunction(quantiles(0.5, 0.9), UInt64), use as seguintes
funções de agregação com combinadores.
uniqState(UserID)
quantilesState(0.5, 0.9)(SendTiming)
Em contraste com as funções uniq e quantiles, uniqState e quantilesState
(com o combinador -State anexado) retornam o estado, em vez do valor final.
Em outras palavras, elas retornam um valor do tipo AggregateFunction.
Nos resultados da consulta SELECT, valores do tipo AggregateFunction têm
representações binárias específicas da implementação em todos os formatos de saída
do ClickHouse.
Há uma configuração especial no nível da sessão, aggregate_function_input_format, que permite construir o estado a partir dos valores de entrada.
Ela oferece suporte aos seguintes formatos:
state - string binária com o estado serializado (o padrão).
Se você exportar dados para, por exemplo, o formato TabSeparated com uma consulta SELECT,
esse dump poderá ser carregado novamente usando a consulta INSERT.
value - o formato esperará um único valor do argumento da função de agregação ou, no caso de vários argumentos, uma tupla deles; isso será desserializado para formar o estado correspondente
array - o formato esperará um Array de valores, conforme descrito na opção value acima; todos os elementos do array serão agregados para formar o estado
Ao selecionar dados de uma tabela AggregatingMergeTree, use a cláusula GROUP BY
e as mesmas funções de agregação usadas na inserção dos dados, mas com o
combinador -Merge.
Uma função de agregação com o combinador -Merge adicionado recebe um conjunto de
estados, combina esses estados e retorna o resultado da agregação completa dos dados.
Por exemplo, as duas consultas a seguir retornam o mesmo resultado:
SELECT uniq(UserID) FROM table
SELECT uniqMerge(state) FROM (SELECT uniqState(UserID) AS state FROM table GROUP BY RegionID)
Consulte a descrição do motor AggregatingMergeTree.
Última modificação em 10 de junho de 2026