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 dadoAggregateFunction 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áriosAggregateFunction. - 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
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.
Uso
Inserção de dados
Para inserir dados em uma tabela com colunas do tipoAggregateFunction, você pode
usar INSERT SELECT com funções de agregação e o
combinador de função 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.
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- o estado serializado (o padrão). Se você exportar dados para, por exemplo, o formatoTabSeparatedcom uma consultaSELECT, esse dump poderá ser carregado novamente usando a consultaINSERT.value- o formato espera um único valor do argumento da função de agregação ou, no caso de vários argumentos, uma tupla deles; o valor é agregado para formar o estado.array- o formato espera um Array de valores, conforme descrito na opçãovalueacima; todos os elementos do array são agregados para formar o estado.
value e array, a coluna é lida como se tivesse o tipo dos valores (T, Tuple(T1, T2) ou um Array deles),
na representação que o formato de entrada usa para esse tipo. Isso funciona da mesma maneira em todos os formatos de entrada, de CSV e JSONEachRow a RowBinary e Parquet.
Seleção de dados
Ao selecionar dados de uma tabelaAggregatingMergeTree, 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:
Exemplo de uso
Consulte a descrição do motor AggregatingMergeTree.Conteúdo relacionado
- Blog: Como usar combinadores de agregação no ClickHouse
- MergeState combinador.
- State combinador.