Этот движок относится к семейству движков Log. Об общих свойствах движков Log и различиях между ними см. в статье Семейство движков Log.
Используйте этот движок, когда нужно записывать данные во множество таблиц с небольшим объемом данных (менее 1 миллиона строк). Например, эту таблицу можно использовать для хранения входящих батчей данных для преобразования, если требуется их атомарная обработка. Один сервер ClickHouse может эффективно обслуживать до 100 тыс. таблиц такого типа. Этот движок таблицы предпочтительнее 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 │
└─────────────────────┴──────────────┴────────────────────────────┘