メインコンテンツまでスキップ
メインコンテンツまでスキップ

ClickHouseでのテーブル作成

ほとんどのデータベースと同様に、ClickHouseはテーブルをデータベースに論理的にグループ化します。新しいデータベースをClickHouseに作成するには、CREATE DATABASE コマンドを使用します:

同様に、CREATE TABLE を使用して新しいテーブルを定義します。データベース名を指定しない場合、テーブルは default データベースに作成されます。

次の my_first_table という名前のテーブルは、helloworld データベースに作成されます:

上記の例では、my_first_table は4つのカラムを持つ MergeTree テーブルです:

  • user_id: 32ビットの符号なし整数
  • message: String データ型で、他のデータベースシステムにおける VARCHARBLOBCLOB などの型を置き換えます
  • timestamp: 時間の瞬間を表す DateTime
  • metric: 32ビットの浮動小数点数
注記

テーブルエンジンは次のことを決定します:

  • データがどのように、どこに保存されるか
  • サポートされるクエリの種類
  • データがレプリケートされるかどうか

選択肢が豊富なエンジンがありますが、単一ノードのClickHouseサーバーでのシンプルなテーブルには、MergeTreeが適しているでしょう。

主キーの簡単な紹介

さらに進む前に、ClickHouseにおける主キーの仕組みを理解することが重要です(主キーの実装は予想外かもしれません!):

  • ClickHouseの主キーは、テーブル内の各行で一意ではありません

ClickHouseテーブルの主キーは、ディスクに書き込む際にデータがどのようにソートされるかを決定します。8,192行または10MBのデータ(インデックスの粒度と呼ばれます)ごとに、主キーインデックスファイルにエントリが作成されます。この粒度の概念は、メモリに簡単に収まるスパースインデックスを生成し、グラニュールは SELECT クエリ中に処理される最小のカラムデータのストライプを表します。

主キーは PRIMARY KEY パラメータを使用して定義できます。 PRIMARY KEY を指定せずにテーブルを定義した場合、キーは ORDER BY 句で指定されたタプルになります。 PRIMARY KEYORDER BY の両方を指定すると、主キーはソート順のプレフィックスでなければなりません。

主キーはまたソーティングキーでもあり、(user_id, timestamp) のタプルです。したがって、各カラムファイルに保存されるデータは user_id でソートされ、その後 timestamp でソートされます。

ヒント

詳細については、ClickHouse Academyのデータモデリングトレーニングモジュールを参照してください。