Перейти к основному содержимому
Перейти к основному содержимому

StripeLog

Этот движок принадлежит семейству лог-движков. См. общие свойства лог-движков и их отличия в статье Семейство лог-движков.

Используйте этот движок в сценариях, когда необходимо записывать множество таблиц с небольшим объемом данных (менее 1 миллиона строк). Например, эта таблица может использоваться для хранения входящих пакетов данных для трансформации, где требуется атомарная обработка. 100 тыс. экземпляров этого типа таблицы жизнеспособны для сервера ClickHouse. Этот движок таблиц следует предпочитать над Log, когда требуется большое количество таблиц. Это восходит к снижению эффективности чтения.

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

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 = StripeLog

Смотрите подробное описание запроса CREATE TABLE.

Запись данных

Движок StripeLog хранит все колонки в одном файле. Для каждого запроса INSERT ClickHouse добавляет блок данных в конец файла таблицы, записывая колонки одну за другой.

Для каждой таблицы ClickHouse записывает файлы:

  • data.bin — Файл данных.
  • index.mrk — Файл с метками. Метки содержат смещения для каждой колонки каждого вставленного блока данных.

Движок StripeLog не поддерживает операции ALTER UPDATE и ALTER DELETE.

Чтение данных

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

Пример использования

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

CREATE TABLE stripe_log_table
(
    timestamp DateTime,
    message_type String,
    message String
)
ENGINE = StripeLog

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

INSERT INTO stripe_log_table VALUES (now(),'REGULAR','The first regular message')
INSERT INTO stripe_log_table VALUES (now(),'REGULAR','The second regular message'),(now(),'WARNING','The first warning message')

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

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

SELECT * FROM stripe_log_table
┌───────────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 │
└─────────────────────┴──────────────┴───────────────────────────┘

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

SELECT * FROM stripe_log_table ORDER BY timestamp
┌───────────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  │
└─────────────────────┴──────────────┴────────────────────────────┘