O motor pertence à família de motores Log. Consulte as propriedades comuns dos motores Log e as diferenças entre eles no artigo Família de motores Log.
Log difere de TinyLog pelo fato de um pequeno arquivo de “marcas” ficar junto aos arquivos de coluna. Essas marcas são gravadas em cada bloco de dados e contêm deslocamentos que indicam onde começar a ler o arquivo para pular o número especificado de linhas. Isso torna possível ler os dados da tabela com várias threads.
Para acesso concorrente aos dados, as operações de leitura podem ser executadas simultaneamente, enquanto as operações de escrita bloqueiam as leituras e umas às outras.
O motor Log não oferece suporte a índices. Da mesma forma, se a escrita em uma tabela falhar, a tabela fica inutilizada, e a leitura dela retorna um erro. O motor Log é adequado para dados temporários, tabelas gravadas uma única vez e fins de teste ou demonstração.
Consulte a descrição detalhada da consulta CREATE TABLE.
O motor Log armazena dados com eficiência, gravando cada coluna em seu próprio arquivo. Para cada tabela, o motor Log grava os seguintes arquivos no caminho de armazenamento especificado:
<column>.bin: Um arquivo de dados para cada coluna, contendo os dados serializados e comprimidos.
__marks.mrk: Um arquivo de marcas que armazena offsets e o número de linhas de cada bloco de dados inserido. As marcas são usadas para tornar a execução de consultas mais eficiente, permitindo que o motor ignore blocos de dados irrelevantes durante a leitura.
Quando os dados são gravados em uma tabela Log:
- Os dados são serializados e comprimidos em blocos.
- Para cada coluna, os dados comprimidos são acrescentados ao respectivo arquivo
<column>.bin.
- Entradas correspondentes são adicionadas ao arquivo
__marks.mrk para registrar o offset e a contagem de linhas dos dados recém-inseridos.
O arquivo com marcas permite que o ClickHouse paralelize a leitura dos dados. Isso significa que uma consulta SELECT retorna as linhas em uma ordem imprevisível. Use a cláusula ORDER BY para ordenar as linhas.
Criando uma tabela:
Inserção de dados:
Usamos duas consultas INSERT para criar dois blocos de dados dentro dos arquivos <column>.bin.
O ClickHouse usa várias threads ao selecionar dados. Cada thread lê um bloco de dados separado e retorna as linhas resultantes de forma independente, assim que termina. Como resultado, a ordem dos blocos de linhas na saída pode não corresponder à ordem desses mesmos blocos na entrada. Por exemplo:
Classificando os resultados (ordem crescente por padrão):
Última modificação em 12 de junho de 2026