跳转到主要内容
用于附加表或字典,例如在将数据库迁移到另一台服务器时。 语法
ATTACH TABLE|DICTIONARY|DATABASE [IF NOT EXISTS] [db.]name [ON CLUSTER cluster] ...
该查询不会在磁盘上创建数据,而是假定数据已经位于适当的位置,只是将指定表、字典或数据库的信息添加到服务器中。执行 ATTACH 查询后,服务器就会识别该表、字典或数据库的存在。 如果某个表此前已被分离 (DETACH 查询) ,也就是说其结构已知,则可以使用简写形式,而无需定义结构。

附加现有表

语法
ATTACH TABLE [IF NOT EXISTS] [db.]name [ON CLUSTER cluster]
此查询会在服务器启动时使用。服务器会将表元数据存储为包含 ATTACH 查询的文件,并在启动时直接执行这些查询 (部分系统表除外,这些系统表会在服务器上显式创建) 。 如果该表已被永久分离,服务器启动时就不会重新附加它,因此你需要显式使用 ATTACH 查询。

创建新表并附加数据

使用指定的表数据路径

该查询会使用给定的结构创建一个新表,并将 user_files 中指定目录里的表数据附加到该表。 语法
ATTACH TABLE name FROM 'path/to/data/' (col1 Type1, ...)
示例
Query
DROP TABLE IF EXISTS test;
INSERT INTO TABLE FUNCTION file('01188_attach/test/data.TSV', 'TSV', 's String, n UInt8') VALUES ('test', 42);
ATTACH TABLE test FROM '01188_attach/test' (s String, n UInt8) ENGINE = File(TSV);
SELECT * FROM test;
Response
┌─s────┬──n─┐
│ test │ 42
└──────┴────┘

使用指定表 UUID

此查询会使用给定的结构创建一个新表,并附加具有指定 UUID 的表中的数据。 该功能由 Atomic 数据库引擎支持。 语法
ATTACH TABLE name UUID '<uuid>' (col1 Type1, ...)

将 MergeTree 表附加为 ReplicatedMergeTree

允许将非复制的 MergeTree 表附加为 ReplicatedMergeTree。创建的 ReplicatedMergeTree 表将使用 default_replica_pathdefault_replica_name 设置的值。也可以将复制表附加为普通 MergeTree 表。 请注意,此查询不会影响 ZooKeeper 中该表的数据。这意味着在执行 attach 后,你必须使用 SYSTEM RESTORE REPLICA 在 ZooKeeper 中添加元数据,或者使用 SYSTEM DROP REPLICA ... FROM ZKPATH ... 将其清除。 如果你尝试为现有的 ReplicatedMergeTree 表添加副本,请注意,转换后的 MergeTree 表中的所有本地数据都会变为 detached 状态。 语法
ATTACH TABLE [db.]name AS [NOT] REPLICATED
将表转换为副本表
DETACH TABLE test;
ATTACH TABLE test AS REPLICATED;
SYSTEM RESTORE REPLICA test;
将表转换为非复制表 获取表的 ZooKeeper 路径和副本名称:
Query
SELECT replica_name, zookeeper_path FROM system.replicas WHERE table='test';
Response
┌─replica_name─┬─zookeeper_path─────────────────────────────────────────────┐
│ r1           │ /clickhouse/tables/401e6a1f-9bf2-41a3-a900-abb7e94dff98/s1 │
└──────────────┴────────────────────────────────────────────────────────────┘
将表作为非复制表附加,并从 ZooKeeper 中删除副本数据:
Query
DETACH TABLE test;
ATTACH TABLE test AS NOT REPLICATED;
SYSTEM DROP REPLICA 'r1' FROM ZKPATH '/clickhouse/tables/401e6a1f-9bf2-41a3-a900-abb7e94dff98/s1';

附加现有字典

将先前处于 分离 状态的字典重新附加。 语法
ATTACH DICTIONARY [IF NOT EXISTS] [db.]name [ON CLUSTER cluster]

附加现有数据库

将先前已分离的数据库重新附加。 语法
ATTACH DATABASE [IF NOT EXISTS] name [ENGINE=<database engine>] [ON CLUSTER cluster]
最后修改于 2026年6月10日