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のデータモデリングトレーニングモジュールをご覧ください。