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

ClickHouseでのテーブルの作成

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

同様に、CREATE TABLEを使用して新しいテーブルを定義します。(データベース名を指定しない場合、そのテーブルはdefaultデータベースに作成されます。)以下のテーブルはhelloworldデータベースにmy_first_tableという名前です:

上記の例では、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のデータモデル化トレーニングモジュールを参照してください。