このエンジンはログエンジンのファミリーに属しています。ログエンジンの一般的な特性とその違いについては、Log Engine Familyの記事を参照してください。
このエンジンは、少量のデータ(1百万行未満)を持つ多数のテーブルを書き込む必要があるシナリオで使用します。例えば、これは変換のために必要な原子的処理のために受信データバッチを格納するテーブルとして使用できます。このテーブルタイプの100kインスタンスは、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エンジンはすべてのカラムを1つのファイルに格納します。各INSERTクエリに対して、ClickHouseはデータブロックをテーブルファイルの末尾に追加し、カラムを1つずつ書き込みます。
各テーブルに対して、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')
2つのINSERTクエリを使用して、data.binファイル内に2つのデータブロックを作成しました。
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 │
└─────────────────────┴──────────────┴────────────────────────────┘