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:
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 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
_part: