Atomic
它支持非阻塞 DROP TABLE 和 RENAME TABLE 查询以及原子 EXCHANGE TABLES 查询。默认情况下使用 Atomic
数据库引擎。
创建数据库
CREATE DATABASE test [ENGINE = Atomic];
细节和建议
表 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_table_uuid_in_table_create_query_if_not_nil 设置来在 SHOW CREATE
查询中显示 UUID。
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
会等待正在使用该表的 SELECT
、INSERT
和其他查询完成。当表不再使用时,它将被实际删除。
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 中的每个表自动生成唯一路径很有用。
另请参阅
- system.databases 系统表