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