> ## 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.

> Документация по Log

# Табличный движок 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>
            Не поддерживается в ClickHouse Cloud
        </div>;
};

<CloudNotSupportedBadge />

Этот движок относится к семейству движков `Log`. Общие свойства движков `Log` и различия между ними см. в статье [Семейство движков Log](/docs/ru/reference/engines/table-engines/log-family/index).

`Log` отличается от [TinyLog](/docs/ru/reference/engines/table-engines/log-family/tinylog) тем, что рядом с файлами столбцов хранится небольшой файл «меток». Эти метки записываются для каждого блока данных и содержат смещения, указывающие, с какого места начинать чтение файла, чтобы пропустить заданное количество строк. Это позволяет читать данные таблицы в несколько потоков.
При одновременном доступе к данным операции чтения могут выполняться параллельно, тогда как операции записи блокируют и чтение, и друг друга.
Движок `Log` не поддерживает индексы. Кроме того, если при записи в таблицу произошёл сбой, таблица повреждается, и чтение из неё возвращает ошибку. Движок `Log` подходит для временных данных, таблиц с однократной записью, а также для тестирования и демонстрации.

<div id="table_engines-log-creating-a-table">
  ## Создание таблицы
</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
```

См. подробное описание запроса [CREATE TABLE](/docs/ru/reference/statements/create/table).

<div id="table_engines-log-writing-the-data">
  ## Запись данных
</div>

Движок `Log` эффективно хранит данные, записывая каждый столбец в отдельный файл. Для каждой таблицы движок `Log` записывает в указанный путь хранения следующие файлы:

* `<column>.bin`: файл данных для каждого столбца, содержащий сериализованные и сжатые данные.
  `__marks.mrk`: файл меток, в котором хранятся смещения и количество строк для каждого вставленного блока данных. Метки используются для эффективного выполнения запросов, позволяя движку пропускать нерелевантные блоки данных при чтении.

<div id="writing-process">
  ### Процесс записи
</div>

Когда данные записываются в таблицу `Log`:

1. Данные сериализуются и сжимаются в блоки.
2. Для каждого столбца сжатые данные дописываются в соответствующий файл `<column>.bin`.
3. В файл `__marks.mrk` добавляются соответствующие записи, фиксирующие смещение и количество строк для вновь вставленных данных.

<div id="table_engines-log-reading-the-data">
  ## Чтение данных
</div>

Файл с метками позволяет ClickHouse распараллеливать чтение данных. Это означает, что запрос `SELECT` возвращает строки в непредсказуемом порядке. Используйте `ORDER BY`, чтобы отсортировать строки.

<div id="table_engines-log-example-of-use">
  ## Пример использования
</div>

Создание таблицы:

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

Вставка данных:

```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')
```

Мы использовали два запроса `INSERT`, чтобы создать два блока данных внутри файлов `<column>.bin`.

ClickHouse использует несколько потоков при выборке данных. Каждый поток читает отдельный блок данных и по завершении независимо возвращает результирующие строки. В результате порядок блоков строк в выводе может не совпадать с порядком этих же блоков во входных данных. Например:

```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 │
└─────────────────────┴──────────────┴───────────────────────────┘
```

Сортировка результатов (по умолчанию — по возрастанию):

```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  │
└─────────────────────┴──────────────┴────────────────────────────┘
```
