3.3 KiB
sidebar_position | sidebar_label |
---|---|
1 | テーブルの作成 |
ClickHouseにおけるテーブルの作成
ほとんどのデータベースと同様に、ClickHouseはテーブルをデータベースに論理的にグループ化します。ClickHouseで新しいデータベースを作成するには、CREATE DATABASE
コマンドを使用します。
CREATE DATABASE IF NOT EXISTS helloworld
同様に、CREATE TABLE
を使用して新しいテーブルを定義します。(データベース名を指定しない場合、テーブルはdefault
データベースに作成されます。)次のテーブルはhelloworld
データベース内にmy_first_table
という名前で作成されます。
CREATE TABLE helloworld.my_first_table
(
user_id UInt32,
message String,
timestamp DateTime,
metric Float32
)
ENGINE = MergeTree()
PRIMARY KEY (user_id, timestamp)
上記の例では、my_first_table
は四つのカラムを持つMergeTree
テーブルです。
user_id
: 32ビットの符号なし整数message
:String
データ型で、他のデータベースシステムのVARCHAR
、BLOB
、CLOB
などの型の代替timestamp
: 時間の瞬間を表すDateTime
値metric
: 32ビットの浮動小数点数
:::note テーブルエンジンは以下を決定します。
- データの保存方法と保存場所
- サポートされているクエリ
- データがレプリケートされるかどうか
選択できるエンジンは多くありますが、単一ノードの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
の順にソートされます。
:::tip 詳細については、ClickHouse Academyのデータモデリングトレーニングモジュールをチェックしてください。 :::