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:
AggregatingMergeTree se ele reduzir o número de linhas em várias ordens de grandeza.
Criar uma tabela
AggregatingMergeTree, são exigidas as mesmas cláusulas que na criação de uma tabela MergeTree.
SELECT e INSERT
-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
test. Crie-o caso ainda não exista, usando o comando abaixo:
test.visits que contém os dados brutos:
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:
test.agg_visits a partir de test.visits:
test.visits:
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:
test.visits, mas desta vez use um timestamp diferente para um dos registros:
SELECT novamente, que retornará a seguinte saída:
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
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).