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