Skip to main content
多くのデータベースと同様に、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 データ型。他のデータベースシステムで使われる VARCHARBLOBCLOB などの型の代わりに使用されます
  • timestamp: ある時点を表す DateTime
  • metric: 32 ビット浮動小数点数
テーブルエンジンによって、次の点が決まります。
  • データをどのように、どこに保存するか
  • どのクエリがサポートされるか
  • データがレプリケートされるかどうか
選択できるエンジンは多数ありますが、単一ノードの ClickHouse サーバー上のシンプルなテーブルであれば、MergeTree を選ぶことになるでしょう。

主キーの簡単な紹介

先に進む前に、ClickHouse で主キーがどのように機能するのかを理解しておくことが重要です (主キーの実装は 意外に感じるかもしれません) :
  • ClickHouse の主キーは、テーブル内の各行に対して 一意ではありません
ClickHouseテーブルの主キーは、データがディスクに書き込まれる際のソート順を決定します。8,192 行ごと、または 10MB の データごと (これを インデックス粒度 と呼びます) に、主キーの索引ファイルに 1 つのエントリが作成されます。この粒度の概念によって、 メモリに容易に収まる スパースインデックス が作られます。また、グラニュールは SELECT クエリの実行時に処理される 最小単位のカラムデータのストライプを表します。 主キーは PRIMARY KEY パラメータを使用して定義できます。PRIMARY KEY を指定せずにテーブルを定義した場合、 そのキーは ORDER BY 句で指定したタプルになります。PRIMARY KEYORDER BY の両方を指定した場合、主キーはソート順のプレフィックスでなければなりません。 主キーはソートキーでもあり、(user_id, timestamp) のタプルです。したがって、各 カラムファイルに格納されるデータは、まず user_id、次に timestamp の順にソートされます。
詳細については、ClickHouse Academy の Modeling Data training module をご覧ください。
Last modified on June 10, 2026