Этот движок относится к семейству движков Log. Общие свойства движков Log и различия между ними см. в статье Семейство движков Log.
Log отличается от TinyLog тем, что рядом с файлами столбцов хранится небольшой файл «меток». Эти метки записываются для каждого блока данных и содержат смещения, указывающие, с какого места начинать чтение файла, чтобы пропустить заданное количество строк. Это позволяет читать данные таблицы в несколько потоков.
При одновременном доступе к данным операции чтения могут выполняться параллельно, тогда как операции записи блокируют и чтение, и друг друга.
Движок Log не поддерживает индексы. Кроме того, если при записи в таблицу произошёл сбой, таблица повреждается, и чтение из неё возвращает ошибку. Движок Log подходит для временных данных, таблиц с однократной записью, а также для тестирования и демонстрации.
См. подробное описание запроса CREATE TABLE.
Движок Log эффективно хранит данные, записывая каждый столбец в отдельный файл. Для каждой таблицы движок Log записывает в указанный путь хранения следующие файлы:
<column>.bin: файл данных для каждого столбца, содержащий сериализованные и сжатые данные.
__marks.mrk: файл меток, в котором хранятся смещения и количество строк для каждого вставленного блока данных. Метки используются для эффективного выполнения запросов, позволяя движку пропускать нерелевантные блоки данных при чтении.
Когда данные записываются в таблицу Log:
- Данные сериализуются и сжимаются в блоки.
- Для каждого столбца сжатые данные дописываются в соответствующий файл
<column>.bin.
- В файл
__marks.mrk добавляются соответствующие записи, фиксирующие смещение и количество строк для вновь вставленных данных.
Файл с метками позволяет ClickHouse распараллеливать чтение данных. Это означает, что запрос SELECT возвращает строки в непредсказуемом порядке. Используйте ORDER BY, чтобы отсортировать строки.
Создание таблицы:
Вставка данных:
Мы использовали два запроса INSERT, чтобы создать два блока данных внутри файлов <column>.bin.
ClickHouse использует несколько потоков при выборке данных. Каждый поток читает отдельный блок данных и по завершении независимо возвращает результирующие строки. В результате порядок блоков строк в выводе может не совпадать с порядком этих же блоков во входных данных. Например:
Сортировка результатов (по умолчанию — по возрастанию):
Последнее изменение 25 июня 2026 г.