メインコンテンツへスキップ
Atomic エンジンは、非ブロッキングの DROP TABLE および RENAME TABLE クエリと、アトミックな EXCHANGE TABLES クエリをサポートします。オープンソース版 ClickHouse では、Atomic データベースエンジンがデフォルトで使用されます。
ClickHouse Cloud では、Shared データベースエンジン がデフォルトで使用されており、 上記の操作もサポートしています。

データベースの作成

CREATE DATABASE test [ENGINE = Atomic] [SETTINGS disk=...];

詳細と推奨事項

テーブル UUID

Atomic データベース内の各テーブルには永続的な UUID が割り当てられており、そのデータは次のディレクトリに保存されます。
/clickhouse_path/store/xxx/xxxyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy/
ここで、xxxyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy はテーブルの UUID を表します。 デフォルトでは、UUID は自動的に生成されます。ただし、テーブルの作成時に UUID を明示的に指定することもできますが、これは推奨されません。 たとえば:
CREATE TABLE name UUID '28f1c61c-2970-457a-bffe-454156ddcfef' (n UInt64) ENGINE = ...;
UUID を SHOW CREATE クエリで表示するには、show_table_uuid_in_table_create_query_if_not_nil 設定を使用できます。

RENAME TABLE

RENAME クエリでは、UUID は変更されず、テーブルデータも移動されません。これらのクエリは即座に実行され、対象のテーブルを使用中の他のクエリの完了を待ちません。

DROP/DETACH TABLE

DROP TABLE を使用しても、データは削除されません。Atomic エンジンは、メタデータを /clickhouse_path/metadata_dropped/ に移動してテーブルを drop 済みとしてマークし、バックグラウンドスレッドに通知するだけです。最終的にテーブルデータが削除されるまでの遅延は、database_atomic_delay_before_drop_table_sec 設定で指定します。 SYNC 修飾子を使用すると、同期モードを指定できます。これを行うには、database_atomic_wait_for_drop_and_detach_synchronously 設定を使用します。この場合、DROP は、そのテーブルを使用している実行中の SELECTINSERT、およびその他のクエリが終了するまで待機します。テーブルは、使用されなくなった時点で削除されます。

EXCHANGE TABLES/辞書

EXCHANGEクエリは、テーブルまたは辞書をアトミックに入れ替えます。たとえば、次のような非アトミックな操作ではなく:
Non-atomic
RENAME TABLE new_table TO tmp, old_table TO new_table, tmp TO old_table;
Atomic データベースを使用できます。
Atomic
EXCHANGE TABLES new_table AND old_table;

Atomic データベース内の ReplicatedMergeTree

ReplicatedMergeTree テーブルでは、ZooKeeper 内のパスとレプリカ名についてエンジンパラメータを指定しないことを推奨します。この場合、設定パラメータ default_replica_pathdefault_replica_name が使用されます。エンジンパラメータを明示的に指定する場合は、{uuid} マクロを使用することを推奨します。これにより、ZooKeeper 内で各テーブルに対して一意のパスが自動的に生成されます。

メタデータ用ディスク

SETTINGSdisk を指定すると、そのディスクにテーブルのメタデータファイルが保存されます。 例:
CREATE TABLE db (n UInt64) ENGINE = Atomic SETTINGS disk=disk(type='local', path='/var/lib/clickhouse-disks/db_disk');
指定しない場合は、デフォルトで database_disk.disk に定義されたディスクが使用されます。

関連項目

最終更新日 2026年6月10日