Перейти к основному содержимому
Перейти к основному содержимому

Команда 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, ...)

Прикрепить Таблицу MergeTree Как ReplicatedMergeTree

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

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

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

Синтаксис

ATTACH TABLE [db.]name AS [NOT] REPLICATED

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

DETACH TABLE test;
ATTACH TABLE test AS REPLICATED;
SYSTEM RESTORE REPLICA test;

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

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

SELECT replica_name, zookeeper_path FROM system.replicas WHERE table='test';

Результат:

┌─replica_name─┬─zookeeper_path─────────────────────────────────────────────┐
│ r1           │ /clickhouse/tables/401e6a1f-9bf2-41a3-a900-abb7e94dff98/s1 │
└──────────────┴────────────────────────────────────────────────────────────┘

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

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]