Pular para o conteúdo principal

Descrição

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.

Sintaxe

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 = ...

Uso

Inserção de dados

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

Seleção de dados

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)

Exemplo de uso

Consulte a descrição do motor AggregatingMergeTree.
Última modificação em 10 de junho de 2026