メインコンテンツへスキップ
メインコンテンツへスキップ

StripeLog テーブルエンジン

Not supported in ClickHouse Cloud

このエンジンは Log エンジンファミリーに属します。Log エンジンの共通の特性と相違点については、Log Engine Family の記事を参照してください。

このエンジンは、少量のデータ(100 万行未満)を持つ多数のテーブルに書き込む必要があるシナリオで使用します。たとえば、このテーブルは、変換のために取り込まれるデータバッチを、各バッチをアトミックに処理する必要がある場合の保存先として使用できます。このテーブルタイプのインスタンスを最大 10 万個まで 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','最初の通常メッセージ')
INSERT INTO stripe_log_table VALUES (now(),'REGULAR','2番目の通常メッセージ'),(now(),'WARNING','最初の警告メッセージ')

2つの INSERT クエリを使用して、data.bin ファイル内に2つのデータブロックを作成しました。

ClickHouse はデータを選択する際に複数スレッドを使用します。各スレッドは別々のデータブロックを読み取り、処理が完了し次第、それぞれ独立して結果行を返します。その結果、出力される行ブロックの順序は、ほとんどの場合、入力時の同じブロックの順序と一致しません。例えば次のようになります。

stripe_log_table から全てを選択する
┌───────────timestamp─┬─message_type─┬─message────────────────────┐
│ 2019-01-18 14:27:32 │ REGULAR      │ 2つ目の通常メッセージ       │
│ 2019-01-18 14:34:53 │ WARNING      │ 最初の警告メッセージ        │
└─────────────────────┴──────────────┴────────────────────────────┘
┌───────────timestamp─┬─message_type─┬─message───────────────────┐
│ 2019-01-18 14:23:43 │ REGULAR      │ 最初の通常メッセージ       │
└─────────────────────┴──────────────┴───────────────────────────┘

結果の並べ替え(デフォルトは昇順):

SELECT * FROM stripe_log_table ORDER BY timestamp
┌───────────timestamp─┬─message_type─┬─message────────────────────┐
│ 2019-01-18 14:23:43 │ REGULAR      │ 最初の通常メッセージ        │
│ 2019-01-18 14:27:32 │ REGULAR      │ 2つ目の通常メッセージ       │
│ 2019-01-18 14:34:53 │ WARNING      │ 最初の警告メッセージ        │
└─────────────────────┴──────────────┴────────────────────────────┘