ClickHouseでのテーブルの作成
ほとんどのデータベースと同様に、ClickHouseはテーブルをデータベースに論理的にグループ化します。新しいデータベースをClickHouseに作成するには、CREATE DATABASE
コマンドを使用します:
同様に、CREATE TABLE
を使用して新しいテーブルを定義します。(データベース名を指定しない場合、そのテーブルはdefault
データベースに作成されます。)以下のテーブルはhelloworld
データベースにmy_first_table
という名前です:
上記の例では、my_first_table
は4つのカラムを持つMergeTree
テーブルです:
user_id
: 32ビットの符号なし整数message
:String
データ型で、他のデータベースシステムのVARCHAR
、BLOB
、CLOB
などの型を置き換えますtimestamp
: 時間の一瞬を表すDateTime
値metric
: 32ビットの浮動小数点数
テーブルエンジンは次のことを決定します:
- データがどのように、そしてどこに保存されるか
- どのクエリがサポートされるか
- データがレプリケートされるかどうか
選択できるエンジンは多数ありますが、単一ノードのClickHouseサーバーでのシンプルなテーブルには、MergeTreeが最適な選択でしょう。
主キーの簡単な紹介
さらに進む前に、ClickHouseにおける主キーの動作を理解することが重要です(主キーの実装は予想外かもしれません!):
- ClickHouseの主キーは各行に対して一意ではないです
ClickHouseテーブルの主キーは、データがディスクに書き込まれる際のソート方法を決定します。8,192行または10MBのデータ(インデックスの粒度と呼ばれます)ごとに、主キーインデックスファイルにエントリが作成されます。この粒度の概念は、メモリに簡単に収まるスパースインデックスを作成し、グラニュールはSELECT
クエリ中に処理される最小のカラムデータのストライプを表します。
主キーはPRIMARY KEY
パラメータを使用して定義できます。PRIMARY KEY
が指定されていないテーブルを定義した場合、キーはORDER BY
句で指定されたタプルになります。PRIMARY KEY
とORDER BY
の両方を指定すると、主キーはソート順のプレフィックスでなければなりません。
主キーはソーティングキーでもあり、これは(user_id, timestamp)
のタプルです。したがって、各カラムファイルに格納されるデータはuser_id
でソートされ、次にtimestamp
でソートされます。
詳細については、ClickHouse Academyのデータモデル化トレーニングモジュールを参照してください。