多くのデータベースと同様に、ClickHouse ではテーブルを論理的に データベース ごとにまとめます。ClickHouse で新しいデータベースを作成するには、CREATE DATABASE コマンドを使用します。
CREATE DATABASE IF NOT EXISTS helloworld同様に、新しいテーブルを定義するには CREATE TABLE を使用します。データベース名を指定しない場合、そのテーブルは
default データベースに作成されます。
次の my_first_table という名前のテーブルは、helloworld データベースに作成されます。
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 は 4 つのカラムを持つ MergeTree テーブルです。
user_id: 32 ビットの符号なし整数message:Stringデータ型。他のデータベースシステムで使われるVARCHAR、BLOB、CLOBなどの型の代わりに使用されますtimestamp: ある時点を表すDateTime値metric: 32 ビット浮動小数点数
主キーの簡単な紹介
先に進む前に、ClickHouse で主キーがどのように機能するのかを理解しておくことが重要です (主キーの実装は 意外に感じるかもしれません) :
- ClickHouse の主キーは、テーブル内の各行に対して 一意ではありません
ClickHouse テーブルの主キーは、データがディスクに書き込まれる際のソート順を決定します。8,192 行ごと、または 10MB の
データごと (これを インデックス粒度 と呼びます) に、主キーの索引ファイルに 1 つのエントリが作成されます。この粒度の概念によって、
メモリに容易に収まる スパースインデックス が作られます。また、グラニュールは SELECT クエリの実行時に処理される
最小単位のカラムデータのストライプを表します。
主キーは PRIMARY KEY パラメータを使用して定義できます。PRIMARY KEY を指定せずにテーブルを定義した場合、
そのキーは ORDER BY 句で指定したタプルになります。PRIMARY KEY と ORDER BY の両方を指定した場合、主キーはソート順のプレフィックスでなければなりません。
主キーはソートキーでもあり、(user_id, timestamp) のタプルです。したがって、各
カラムファイルに格納されるデータは、まず user_id、次に timestamp の順にソートされます。