ClickHouseでのテーブル作成
ほとんどのデータベースと同様に、ClickHouseはテーブルをデータベースに論理的にグループ化します。新しいデータベースをClickHouseに作成するには、CREATE DATABASE
コマンドを使用します:
同様に、CREATE TABLE
を使用して新しいテーブルを定義します。データベース名を指定しない場合、テーブルは default
データベースに作成されます。
次の my_first_table
という名前のテーブルは、helloworld
データベースに作成されます:
上記の例では、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のデータモデリングトレーニングモジュールを参照してください。