CREATE DATABASE
新しいデータベースを作成します。
句
IF NOT EXISTS
db_name データベースがすでに存在する場合、ClickHouse は新しいデータベースを作成せず、次のように動作します。
- この句が指定されている場合は、例外をスローしません。
- この句が指定されていない場合は、例外をスローします。
ON CLUSTER
ClickHouse は、指定したクラスタ内のすべてのサーバーに db_name データベースを作成します。詳細は Distributed DDL の記事を参照してください。
ENGINE
デフォルトでは、ClickHouse は独自の Atomic データベースエンジンを使用します。このほかに、MySQL、PostgresSQL、MaterializedPostgreSQL、Replicated、SQLite があります。
COMMENT
データベースを作成する際に、コメントを追加できます。
コメント指定は、すべてのデータベースエンジンでサポートされています。
構文
例
クエリ:
結果:
SETTINGS
lazy_load_tables
有効にすると、データベースの起動時にテーブルが完全にはロードされません。その代わり、各テーブルに対して軽量なプロキシが作成され、最初にアクセスされたときに実際のテーブルエンジンが生成されます。これにより、多数のテーブルを持ち、そのうち実際にクエリされるのは一部に限られるデータベースにおいて、起動時間とメモリ使用量を削減できます。
テーブルのメタデータをディスク上に保存するデータベースエンジン(例:Atomic、Ordinary)に適用されます。ビュー、materialized view、辞書、テーブル関数を基盤とするテーブルは、この設定に関係なく常に即時にロードされます。
使用するタイミング: この設定は、テーブル数が多い(数百〜数千)データベースで、そのうち一部のみが頻繁にクエリされる場合に有用です。テーブルエンジンオブジェクトの作成、データパーツのスキャン、バックグラウンドスレッドの初期化を初回アクセスまで遅延させることで、サーバーの起動時間とメモリ使用量を削減します。
system.tables への影響:
- テーブルへのアクセス前は、
system.tablesはそのエンジンをTableProxyとして表示します。初回アクセス後は、実際のエンジン名(例:MergeTree)を表示します。 - 実ストレージがまだ作成されていないため、
total_rowsやtotal_bytesのようなカラムは、未ロードのテーブルに対してはNULLを返します。
DDL 操作との相互作用:
SELECT、INSERT、ALTER、DROPは、初回使用時に実テーブルエンジンのロードを透過的にトリガーします。RENAME TABLEはロードをトリガーせずに動作します。- 一度テーブルがロードされると、そのサーバープロセスのライフタイム中はロードされたままになります。
制限事項:
system.tablesのメタデータ(例:total_rows、engine)に依存する監視ツールは、未ロードのテーブルについては不完全な情報しか取得できない場合があります。- 未ロードのテーブルへの最初のクエリでは、保存されている
CREATE TABLEステートメントのパースおよびエンジンの初期化に伴う一度きりのロードコストが発生します。
デフォルト値: 0(無効)。