跳至主要内容

ATTACH 语句

例如,在将数据库移动到另一台服务器时,附加表或字典。

语法

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, ...)

示例

查询

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;

结果

┌─s────┬──n─┐
│ test │ 42
└──────┴────┘

使用指定的表 UUID

此查询创建一个具有提供的结构的新表,并从具有指定 UUID 的表附加数据。它受 Atomic 数据库引擎支持。

语法

ATTACH TABLE name UUID '<uuid>' (col1 Type1, ...)

附加现有字典

附加之前已分离的字典。

语法

ATTACH DICTIONARY [IF NOT EXISTS] [db.]name [ON CLUSTER cluster]

附加现有数据库

附加之前已分离的数据库。

语法

ATTACH DATABASE [IF NOT EXISTS] name [ENGINE=<database engine>] [ON CLUSTER cluster]