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

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