Skip to main content
O motor herda de MergeTree, alterando a lógica de mesclagem das partes de dados. O ClickHouse substitui todas as linhas com a mesma chave primária (ou, mais precisamente, com a mesma chave de ordenação) por uma única linha (dentro de uma única parte de dados) que armazena uma combinação de estados de funções de agregação. Você pode usar tabelas AggregatingMergeTree para agregação incremental de dados, inclusive em visões materializadas agregadas. Você pode ver um exemplo de como usar o AggregatingMergeTree e funções de agregação no vídeo abaixo:
O motor processa todas as colunas com os seguintes tipos: É apropriado usar AggregatingMergeTree se ele reduzir o número de linhas em várias ordens de grandeza.

Criar uma tabela

Para uma descrição dos parâmetros da requisição, consulte descrição da requisição. Cláusulas da consulta Ao criar uma tabela AggregatingMergeTree, são exigidas as mesmas cláusulas que na criação de uma tabela MergeTree.

SELECT e INSERT

Para inserir dados, use a consulta INSERT SELECT com funções de agregação com o sufixo -State. Ao selecionar dados da 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 sufixo -Merge. Nos resultados da consulta SELECT, os valores do tipo AggregateFunction têm uma representação binária específica da implementação em todos os formatos de saída do ClickHouse. Por exemplo, se você exportar os dados no formato TabSeparated com uma consulta SELECT, poderá carregar esse dump de volta com uma consulta INSERT.

Exemplo de visão materializada agregada

O exemplo a seguir pressupõe que você tenha um banco de dados chamado test. Crie-o caso ainda não exista, usando o comando abaixo:
Agora crie a tabela test.visits que contém os dados brutos:
Em seguida, você precisa de uma tabela AggregatingMergeTree que armazenará AggregationFunctions para controlar o número total de visitas e o número de usuários únicos. Crie uma visão materializada AggregatingMergeTree que monitora a tabela test.visits e usa o tipo AggregateFunction:
Crie uma visão materializada que preenche test.agg_visits a partir de test.visits:
Insira dados na tabela test.visits:
Os dados são inseridos tanto em test.visits quanto em test.agg_visits. Para obter os dados agregados, execute uma consulta como SELECT ... GROUP BY ... na visão materializada test.visits_mv:
Adicione mais alguns registros em test.visits, mas desta vez use um timestamp diferente para um dos registros:
Execute a consulta SELECT novamente, que retornará a seguinte saída:
Em alguns casos, pode ser interessante evitar a pré-agregação de linhas no momento da inserção para transferir o custo da agregação do momento de inserção para o momento do merge. Normalmente, é necessário incluir as colunas que não fazem parte da agregação na cláusula GROUP BY da definição da visão materializada para evitar um erro. No entanto, é possível utilizar a função initializeAggregation com a configuração optimize_on_insert = 0 (habilitada por padrão) para atingir esse objetivo. Nesse caso, o uso de GROUP BY deixa de ser obrigatório:
Ao usar initializeAggregation, um estado de agregação é criado para cada linha individual, sem agrupamento. Cada linha de origem produz uma linha na visão materializada, e a agregação real acontece depois, quando o AggregatingMergeTree mescla as partes. Isso só é verdadeiro se optimize_on_insert = 0.

Agregação de elementos de Tuple

Quando a configuração allow_tuple_element_aggregation está habilitada, as colunas Tuple são achatadas recursivamente para que cada elemento folha participe da agregação de forma independente. Isso significa que as subcolunas AggregateFunction ou SimpleAggregateFunction dentro de uma Tuple são agregadas de acordo com suas respectivas funções, como se fossem colunas de nível superior. As subcolunas que pertencem a uma Tuple na chave de ordenação são excluídas da agregação. As subcolunas não agregadas são tratadas como colunas comuns (seu primeiro valor é mantido).
Essa configuração é imutável e deve ser especificada no momento da criação da tabela.
total_visits é agregado usando sum (100 + 200 = 300), enquanto unique_users é agregado usando max (max(5, 8) = 8).
Última modificação em 23 de julho de 2026