> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-parallel-read-in-order-multi-part.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

> Документация по оператору ATTACH

# ATTACH

Присоединяет таблицу или словарь, например при переносе базы данных на другой сервер.

**Синтаксис**

```sql theme={null}
ATTACH TABLE|DICTIONARY|DATABASE [IF NOT EXISTS] [db.]name [ON CLUSTER cluster] ...
```

Этот запрос не создает данные на диске, а предполагает, что данные уже находятся в соответствующих местах, и лишь добавляет на сервер информацию об указанной таблице, словаре или базе данных. После выполнения запроса `ATTACH` сервер будет знать о существовании таблицы, словаря или базы данных.

Если таблица ранее была отсоединена (запрос [DETACH](/ru/reference/statements/detach)), то есть ее структура известна, вы можете использовать сокращенную форму без определения структуры.

## Присоединение существующей таблицы

**Синтаксис**

```sql theme={null}
ATTACH TABLE [IF NOT EXISTS] [db.]name [ON CLUSTER cluster]
```

Этот запрос используется при запуске сервера. Сервер хранит метаданные таблиц в виде файлов с запросами `ATTACH`, которые он просто выполняет при запуске (за исключением некоторых системных таблиц, которые явно создаются на сервере).

Если таблица была отсоединена навсегда, при запуске сервера она не будет присоединена снова, поэтому нужно явно выполнить запрос `ATTACH`.

## Создать новую таблицу и присоединить данные

### С указанием пути к данным таблицы

Этот запрос создает новую таблицу с указанной структурой и присоединяет данные таблицы из указанного каталога в `user_files`.
Для выполнения этого запроса пользователю необходимы привилегии `READ ON FILE` и `WRITE ON FILE`: запрос читает каталог и перемещает его в путь к данным новой таблицы.

**Синтаксис**

```sql theme={null}
ATTACH TABLE name FROM 'path/to/data/' (col1 Type1, ...)
```

**Пример**

```sql title="Query" theme={null}
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;
```

```sql title="Response" theme={null}
┌─s────┬──n─┐
│ test │ 42 │
└──────┴────┘
```

### С указанием UUID таблицы

Этот запрос создаёт новую таблицу с указанной структурой и присоединяет данные из таблицы с указанным UUID.
Поддерживается движком базы данных [Atomic](/ru/reference/engines/database-engines/atomic).

**Синтаксис**

```sql theme={null}
ATTACH TABLE name UUID '<uuid>' (col1 Type1, ...)
```

## Присоединение таблицы MergeTree как ReplicatedMergeTree

Позволяет присоединить нереплицируемую таблицу MergeTree как ReplicatedMergeTree. Таблица ReplicatedMergeTree будет создана со значениями настроек `default_replica_path` и `default_replica_name`. Также можно присоединить реплицируемую таблицу как обычную MergeTree.

Обратите внимание, что данные таблицы в ZooKeeper этим запросом не затрагиваются. Это означает, что после присоединения вам нужно добавить метаданные в ZooKeeper с помощью `SYSTEM RESTORE REPLICA` или удалить их с помощью `SYSTEM DROP REPLICA ... FROM ZKPATH ...`.

Если вы пытаетесь добавить реплику в существующую таблицу ReplicatedMergeTree, имейте в виду, что все локальные данные в преобразованной таблице MergeTree будут переведены в состояние detached.

**Синтаксис**

```sql theme={null}
ATTACH TABLE [db.]name AS [NOT] REPLICATED
```

**Преобразовать таблицу в реплицируемую**

```sql theme={null}
DETACH TABLE test;
ATTACH TABLE test AS REPLICATED;
SYSTEM RESTORE REPLICA test;
```

**Преобразовать таблицу в нереплицируемую**

Получите путь в ZooKeeper и имя реплики таблицы:

```sql title="Query" theme={null}
SELECT replica_name, zookeeper_path FROM system.replicas WHERE table='test';
```

```sql title="Response" theme={null}
┌─replica_name─┬─zookeeper_path─────────────────────────────────────────────┐
│ r1           │ /clickhouse/tables/401e6a1f-9bf2-41a3-a900-abb7e94dff98/s1 │
└──────────────┴────────────────────────────────────────────────────────────┘
```

Подключите таблицу как нереплицируемую и удалите данные реплики из ZooKeeper:

```sql title="Query" theme={null}
DETACH TABLE test;
ATTACH TABLE test AS NOT REPLICATED;
SYSTEM DROP REPLICA 'r1' FROM ZKPATH '/clickhouse/tables/401e6a1f-9bf2-41a3-a900-abb7e94dff98/s1';
```

## Присоединить существующий словарь

Присоединяет ранее отключённый словарь.

**Синтаксис**

```sql theme={null}
ATTACH DICTIONARY [IF NOT EXISTS] [db.]name [ON CLUSTER cluster]
```

## Присоединение существующей базы данных

Присоединяет ранее отсоединённую базу данных.

**Синтаксис**

```sql theme={null}
ATTACH DATABASE [IF NOT EXISTS] name [ENGINE=<database engine>] [ON CLUSTER cluster]
```
