[go: up one dir, main page]

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

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は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のデータモデリングトレーニングモジュールをご覧ください。