新しいデータベースを作成します。
CREATE DATABASE [IF NOT EXISTS] db_name [ON CLUSTER cluster] [ENGINE = engine(...)] [SETTINGS ...] [COMMENT 'Comment']句
IF NOT EXISTS
db_name データベースがすでに存在する場合、ClickHouse は新しいデータベースを作成せず、次のように動作します。
- この句が指定されている場合、例外はスローされません。
- この句が指定されていない場合、例外がスローされます。
ON CLUSTER
ClickHouse は、指定したクラスターを構成するすべてのサーバー上に db_name データベースを作成します。詳しくは、Distributed DDL を参照してください。
エンジン
デフォルトでは、ClickHouse は独自の Atomic データベースエンジンを使用します。これ以外にも、MySQL、PostgresSQL、MaterializedPostgreSQL、Replicated、SQLite などがあります。
コメント
データベースの作成時にコメントを追加できます。
コメントは、すべてのデータベースエンジンでサポートされています。
構文
CREATE DATABASE db_name ENGINE = engine(...) COMMENT 'Comment'例
CREATE DATABASE db_comment ENGINE = Memory COMMENT 'The temporary database';
SELECT name, comment FROM system.databases WHERE name = 'db_comment';┌─name───────┬─comment────────────────┐
│ db_comment │ The temporary database │
└────────────┴────────────────────────┘設定
lazy_load_tables
有効にすると、データベースの起動時にテーブルは完全には読み込まれません。代わりに、各テーブルに対して軽量なプロキシが作成され、実際のテーブルエンジンは最初のアクセス時に実体化されます。これにより、多数のテーブルを含み、実際にクエリされるのがその一部に限られるデータベースで、起動時間とメモリ使用量を削減できます。
CREATE DATABASE db_name ENGINE = Atomic SETTINGS lazy_load_tables = 1;ディスク上にテーブルメタデータを保存するデータベースエンジン (例: 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 (無効) 。