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

Atomic

Atomicエンジンは、非ブロッキングのDROP TABLEおよびRENAME TABLEクエリ、及び原子的なEXCHANGE TABLESクエリをサポートしています。Atomicデータベースエンジンは、オープンソースのClickHouseでデフォルトで使用されます。

注記

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 = ...;
注記

SHOW CREATEクエリでUUIDを表示するために、show_table_uuid_in_table_create_query_if_not_nil設定を使用できます。

RENAME TABLE

RENAMEクエリはUUIDを変更せず、テーブルデータを移動しません。これらのクエリは即座に実行され、テーブルを使用している他のクエリが完了するのを待つことはありません。

DROP/DETACH TABLE

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

EXCHANGE TABLES/DICTIONARIES

EXCHANGEクエリは、テーブルまたは辞書を原子的にスワップします。例えば、この非原子的な操作の代わりに:

RENAME TABLE new_table TO tmp, old_table TO new_table, tmp TO old_table;

原子的な操作を使用できます:

EXCHANGE TABLES new_table AND old_table;

atomicデータベースのReplicatedMergeTree

ReplicatedMergeTreeテーブルに対しては、ZooKeeperのパスとレプリカ名に対してエンジンパラメータを指定しないことを推奨します。この場合、構成パラメータdefault_replica_pathおよびdefault_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で定義されたディスクがデフォルトで使用されます。

参照