> ## Documentation Index
> Fetch the complete documentation index at: https://clickhouse.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

> Documentação sobre Log

# Motor de tabela Log

export const CloudNotSupportedBadge = () => {
  return <div className="cloudNotSupportedBadge">
            <div className="cloudNotSupportedIcon">
            <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
                <path strokeWidth="1.5" d="M6.33366 12.6666L12.3739 12.6667C13.6593 12.6667 14.7073 11.6187 14.7073 10.3334C14.7073 9.04804 13.6593 8.00003 12.3739 8.00003C12.3739 8.00003 12.3337 7.66659 12.0003 7.33325M10.667 5.33322C8.00033 2.33325 4.45395 4.78537 4.14195 6.68203C2.55728 6.7627 1.29395 8.06203 1.29395 9.6667C1.29395 11.3234 2.66699 12.6666 4.00033 12.6666" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" />
                <path strokeWidth="1.5" d="M2.66699 14L12.0003 4.66663" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" />
            </svg>

        </div>
            Sem suporte no ClickHouse Cloud
        </div>;
};

<CloudNotSupportedBadge />

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](/docs/pt-BR/reference/engines/table-engines/log-family/index).

`Log` difere de [TinyLog](/docs/pt-BR/reference/engines/table-engines/log-family/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 offsets 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.

<div id="table_engines-log-creating-a-table">
  ## Criando uma tabela
</div>

```sql theme={null}
CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster]
(
    column1_name [type1] [DEFAULT|MATERIALIZED|ALIAS expr1],
    column2_name [type2] [DEFAULT|MATERIALIZED|ALIAS expr2],
    ...
) ENGINE = Log
```

Consulte a descrição detalhada da consulta [CREATE TABLE](/docs/pt-BR/reference/statements/create/table).

<div id="table_engines-log-writing-the-data">
  ## Gravando os dados
</div>

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.

<div id="writing-process">
  ### Processo de gravação
</div>

Quando os dados são gravados em uma tabela `Log`:

1. Os dados são serializados e comprimidos em blocos.
2. Para cada coluna, os dados comprimidos são acrescentados ao respectivo arquivo `<column>.bin`.
3. Entradas correspondentes são adicionadas ao arquivo `__marks.mrk` para registrar o offset e a contagem de linhas dos dados recém-inseridos.

<div id="table_engines-log-reading-the-data">
  ## Leitura dos dados
</div>

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.

<div id="table_engines-log-example-of-use">
  ## Exemplo de uso
</div>

Criando uma tabela:

```sql theme={null}
CREATE TABLE log_table
(
    timestamp DateTime,
    message_type String,
    message String
)
ENGINE = Log
```

Inserção de dados:

```sql theme={null}
INSERT INTO log_table VALUES (now(),'REGULAR','The first regular message')
INSERT INTO log_table VALUES (now(),'REGULAR','The second regular message'),(now(),'WARNING','The first warning message')
```

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:

```sql theme={null}
SELECT * FROM log_table
```

```text theme={null}
┌───────────timestamp─┬─message_type─┬─message────────────────────┐
│ 2019-01-18 14:27:32 │ REGULAR      │ The second regular message │
│ 2019-01-18 14:34:53 │ WARNING      │ The first warning message  │
└─────────────────────┴──────────────┴────────────────────────────┘
┌───────────timestamp─┬─message_type─┬─message───────────────────┐
│ 2019-01-18 14:23:43 │ REGULAR      │ The first regular message │
└─────────────────────┴──────────────┴───────────────────────────┘
```

Classificando os resultados (ordem crescente por padrão):

```sql theme={null}
SELECT * FROM log_table ORDER BY timestamp
```

```text theme={null}
┌───────────timestamp─┬─message_type─┬─message────────────────────┐
│ 2019-01-18 14:23:43 │ REGULAR      │ The first regular message  │
│ 2019-01-18 14:27:32 │ REGULAR      │ The second regular message │
│ 2019-01-18 14:34:53 │ WARNING      │ The first warning message  │
└─────────────────────┴──────────────┴────────────────────────────┘
```
