trilha

Tecnologias/02 - Bancos de Dados/04 - Colunares/01 - ClickHouse2 min

MergeTree e Consultas no ClickHouse

Como funciona

Na família MergeTree, inserções produzem partes de dados que podem ser combinadas em segundo plano. ORDER BY define a chave de ordenação. O índice primário esparso ajuda a localizar blocos relevantes, em vez de manter uma entrada para cada linha como em um índice tradicional de busca pontual.

PARTITION BY separa os dados em partições de gerenciamento. Não equivale ao índice primário nem deve ser confundido com distribuir automaticamente cada partição em um servidor diferente. Referência: MergeTree.

Exemplo SQL

CREATE TABLE acessos (
    instante DateTime,
    caminho String,
    duracao_ms UInt32
)
ENGINE = MergeTree
PARTITION BY toYYYYMM(instante)
ORDER BY (caminho, instante);

INSERT INTO acessos VALUES
    ('2026-09-15 10:00:00', '/produtos', 80),
    ('2026-09-15 10:01:00', '/produtos', 120),
    ('2026-09-15 10:02:00', '/carrinho', 200);

SELECT caminho, count() AS acessos, avg(duracao_ms) AS media_ms
FROM acessos
GROUP BY caminho
ORDER BY caminho;

O resultado contém /produtos com 2 acessos e média 100, e /carrinho com 1 acesso e média 200. A consulta lê as colunas usadas nessa agregação. A ordenação escolhida pode favorecer filtros por caminho e intervalo de tempo; esse exemplo de agregação global não elimina a necessidade de examinar os dados relevantes de todos os caminhos.

Duplicidade e substituição

ReplacingMergeTree pode eliminar versões duplicadas durante merges conforme sua chave e configuração. A substituição é eventual: não se deve assumir que uma consulta comum logo após a inserção já verá apenas a versão desejada. FINAL pode aplicar essa lógica na consulta, com custo adicional. Referência: ReplacingMergeTree.

Relação com S3

A função de tabela s3() permite consultar arquivos em armazenamento de objetos. Ler um Parquet no S3 não equivale a inserir o conteúdo numa tabela MergeTree: localização, metadados e caminhos de acesso continuam diferentes. Exemplo em 2. Apache Parquet e Consultas no S3.

Aprofundamento aplicado

Partes pequenas são uma dívida de manutenção

Muitas inserções pequenas produzem muitas partes e aumentam o trabalho de merges. Agrupar eventos pode amortizar esse custo, mas acrescenta espera e memória no produtor. A política de lote precisa considerar quantidade, bytes e tempo máximo para publicar.

PARTITION BY define fronteiras de gerenciamento; partes de partições distintas não são combinadas pelo merge normal. Particionar por uma chave quase única pode criar muitas partições pequenas e impedir a consolidação desejada. Referência: partes e partições.

Ordenação começa pelo acesso frequente

No exemplo (caminho, instante), filtros por caminho e tempo podem reduzir leituras. Uma consulta só pelo tempo pode exigir examinar trechos de vários caminhos. Outra ordem favorece outra família de consultas; avalie o conjunto, não apenas um painel.

Exercício: ingira o mesmo volume com lotes pequenos e maiores em tabelas de estudo. Resultado esperado: compare partes ativas, trabalho de merge, latência de ingestão e leitura. Não compare apenas o tempo da chamada de inserção.


Parte de ClickHouse

Buscar

Busca por título, seção e texto das notas