Skip to main content

O que são partes de tabela no ClickHouse?


Os dados de cada tabela da família de motores MergeTree no ClickHouse são organizados em disco como uma coleção de data part imutáveis. Para ilustrar isso, usamos esta tabela (adaptada do conjunto de dados de preços de imóveis do Reino Unido), que registra a data, a cidade, a rua e o preço dos imóveis vendidos no Reino Unido:
Você pode consultar esta tabela em nosso playground SQL do ClickHouse. Uma parte de dados é criada sempre que um conjunto de linhas é inserido na tabela. O diagrama a seguir mostra isso:
Quando o servidor do ClickHouse processa a inserção de exemplo com 4 linhas (por exemplo, por meio de uma instrução INSERT INTO) mostrada no diagrama acima, ele executa várias etapas: Ordenação: As linhas são ordenadas pela chave de ordenação da tabela (town, street), e um índice primário esparso é gerado para as linhas ordenadas. Divisão: Os dados ordenados são divididos em colunas. Compressão: Cada coluna é comprimida. Gravação em disco: As colunas comprimidas são salvas como arquivos binários de coluna em um novo diretório que representa a parte de dados da inserção. O índice primário esparso também é comprimido e armazenado no mesmo diretório. Dependendo do engine específico da tabela, transformações adicionais podem ocorrer juntamente com a ordenação. As partes de dados são autocontidas e incluem todos os metadados necessários para interpretar seu conteúdo sem exigir um catálogo central. Além do índice primário esparso, as partes contêm metadados adicionais, como data skipping indexes secundários, estatísticas de coluna, checksums, índices min-max (se particionamento for usado) e mais.

Mesclagens de partes

Para gerenciar o número de partes por tabela, uma tarefa de mesclagem em segundo plano combina periodicamente partes menores em partes maiores até que elas atinjam um tamanho configurável comprimido (normalmente ~150 GB). As partes mescladas são marcadas como inativas e excluídas após um intervalo de tempo configurável. Com o tempo, esse processo cria uma estrutura hierárquica de partes mescladas, por isso ela é chamada de tabela MergeTree:
Para minimizar o número de partes iniciais e a sobrecarga das mesclagens, os clientes de banco de dados são incentivados a inserir tuplas em lote, por exemplo, 20.000 linhas de uma vez, ou a usar o modo de inserção assíncrona, no qual o ClickHouse armazena em buffer linhas de vários INSERTs recebidos na mesma tabela e cria uma nova parte somente depois que o tamanho do buffer excede um limite configurável ou que um timeout é atingido.

Monitorando partes de tabela

Você pode consultar a lista de todas as partes ativas que existem atualmente na nossa tabela de exemplo usando a coluna virtual _part:
A consulta acima recupera os nomes dos diretórios no disco, com cada diretório representando uma parte de dados ativa da tabela. Os componentes desses nomes de diretório têm significados específicos, documentados aqui para quem quiser se aprofundar no assunto. Como alternativa, o ClickHouse mantém informações sobre todas as partes de todas as tabelas na tabela de sistema system.parts, e a consulta a seguir retorna, para nossa tabela de exemplo acima, a lista de todas as partes ativas no momento, seu nível de mesclagem e o número de linhas armazenadas nessas partes:
O nível de mesclagem é incrementado em um a cada mesclagem adicional na parte. Um nível 0 indica que esta é uma parte nova que ainda não passou por mesclagem.
Última modificação em 3 de julho de 2026