ClickHouse/docs/ru/sql-reference/statements/attach.md

82 lines
3.7 KiB
Markdown
Raw Normal View History

---
toc_priority: 40
toc_title: ATTACH
---
# ATTACH {#attach}
2021-08-04 06:46:20 +00:00
Выполняет подключение таблицы или словаря, например, при перемещении базы данных на другой сервер.
2021-08-04 06:46:20 +00:00
**Синтаксис**
``` sql
ATTACH TABLE|DICTIONARY [IF NOT EXISTS] [db.]name [ON CLUSTER cluster] ...
```
Запрос не создаёт данные на диске, а предполагает, что данные уже лежат в соответствующих местах, и всего лишь добавляет информацию о таблице или словаре на сервер. После выполнения запроса `ATTACH` сервер будет знать о существовании таблицы или словаря.
2021-04-04 12:14:09 +00:00
Если таблица перед этим была отключена при помощи ([DETACH](../../sql-reference/statements/detach.md)), т.е. её структура известна, можно использовать сокращенную форму записи без определения структуры.
2021-08-04 06:46:20 +00:00
## Присоединение существующей таблицы {#attach-existing-table}
**Синтаксис**
``` sql
ATTACH TABLE [IF NOT EXISTS] [db.]name [ON CLUSTER cluster]
```
2021-03-15 18:36:42 +00:00
Этот запрос используется при старте сервера. Сервер хранит метаданные таблиц в виде файлов с запросами `ATTACH`, которые он просто исполняет при запуске (за исключением некоторых системных таблиц, которые явно создаются на сервере).
2021-03-17 00:09:42 +00:00
Если таблица была отключена перманентно, она не будет подключена обратно во время старта сервера, так что нужно явно использовать запрос `ATTACH`, чтобы подключить ее.
2021-08-04 06:46:20 +00:00
## Создание новой таблицы и присоединение данных {#create-new-table-and-attach-data}
### С указанием пути к табличным данным {#attach-with-specified-path}
2021-04-04 12:14:09 +00:00
2021-08-04 06:46:20 +00:00
Запрос создает новую таблицу с указанной структурой и присоединяет табличные данные из соответствующего каталога в `user_files`.
**Синтаксис**
2021-04-04 12:14:09 +00:00
```sql
ATTACH TABLE name FROM 'path/to/data/' (col1 Type1, ...)
```
**Пример**
Запрос:
```sql
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
┌─s────┬──n─┐
│ test │ 42 │
└──────┴────┘
```
2021-08-04 06:46:20 +00:00
### С указанием UUID таблицы {#attach-with-specified-uuid}
Этот запрос создает новую таблицу с указанной структурой и присоединяет данные из таблицы с указанным UUID.
Запрос поддерживается только движком баз данных [Atomic](../../engines/database-engines/atomic.md).
**Синтаксис**
2021-04-04 12:14:09 +00:00
```sql
ATTACH TABLE name UUID '<uuid>' (col1 Type1, ...)
```
2021-08-04 06:46:20 +00:00
## Присоединение существующего словаря {#attach-existing-dictionary}
Присоединяет ранее отключенный словарь.
**Синтаксис**
``` sql
ATTACH DICTIONARY [IF NOT EXISTS] [db.]name [ON CLUSTER cluster]
```