Permet de rattacher une table ou un dictionnaire, par exemple lors du déplacement d’une base de données vers un autre serveur.
Syntaxe
ATTACH TABLE|DICTIONARY|DATABASE [IF NOT EXISTS] [db.]name [ON CLUSTER cluster] ...
La requête ne crée pas de données sur le disque, mais suppose que les données se trouvent déjà aux emplacements appropriés et se contente d’ajouter au serveur des informations sur la table, le dictionnaire ou la base de données spécifiés. Après l’exécution de la requête ATTACH, le serveur connaîtra l’existence de la table, du dictionnaire ou de la base de données.
Si une table a été précédemment détachée (requête DETACH), c’est-à-dire que sa structure est connue, vous pouvez utiliser la forme abrégée sans définir la structure.
Attacher une table existante
Syntaxe
ATTACH TABLE [IF NOT EXISTS] [db.]name [ON CLUSTER cluster]
Cette requête est utilisée au démarrage du serveur. Le serveur stocke les métadonnées des tables dans des fichiers contenant des requêtes ATTACH, qu’il exécute simplement au lancement (à l’exception de certaines tables système, qui sont créées explicitement sur le serveur).
Si la table a été détachée de façon permanente, elle ne sera pas attachée au démarrage du serveur ; vous devez donc exécuter explicitement la requête ATTACH.
Créer une nouvelle table et y attacher des données
Avec un chemin spécifié pour les données de la table
La requête crée une nouvelle table avec la structure fournie et y attache les données de la table à partir du répertoire indiqué dans user_files.
Syntaxe
ATTACH TABLE name FROM 'path/to/data/' (col1 Type1, ...)
Exemple
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 │
└──────┴────┘
Avec l’UUID de la table spécifié
Cette requête crée une nouvelle table avec la structure fournie et y attache les données de la table ayant l’UUID spécifié.
Elle est prise en charge par le moteur de base de données Atomic.
Syntaxe
ATTACH TABLE name UUID '<uuid>' (col1 Type1, ...)
Attacher une table MergeTree en ReplicatedMergeTree
Permet d’attacher une table MergeTree non répliquée en tant que ReplicatedMergeTree. La table ReplicatedMergeTree sera créée avec les valeurs des paramètres default_replica_path et default_replica_name. Il est également possible d’attacher une table répliquée en tant que table MergeTree classique.
Notez que les données de la table dans ZooKeeper ne sont pas modifiées par cette requête. Cela signifie que vous devez ajouter les métadonnées dans ZooKeeper à l’aide de SYSTEM RESTORE REPLICA ou les supprimer avec SYSTEM DROP REPLICA ... FROM ZKPATH ... après l’attachement.
Si vous essayez d’ajouter une réplique à une table ReplicatedMergeTree existante, gardez à l’esprit que toutes les données locales de la table MergeTree convertie seront détachées.
Syntaxe
ATTACH TABLE [db.]name AS [NOT] REPLICATED
Convertir une table en table répliquée
DETACH TABLE test;
ATTACH TABLE test AS REPLICATED;
SYSTEM RESTORE REPLICA test;
Convertir une table en table non répliquée
Récupérez le chemin ZooKeeper et le nom de la réplique de la table :
SELECT replica_name, zookeeper_path FROM system.replicas WHERE table='test';
┌─replica_name─┬─zookeeper_path─────────────────────────────────────────────┐
│ r1 │ /clickhouse/tables/401e6a1f-9bf2-41a3-a900-abb7e94dff98/s1 │
└──────────────┴────────────────────────────────────────────────────────────┘
Attacher la table comme non répliquée et supprimer les données de la réplique dans ZooKeeper :
DETACH TABLE test;
ATTACH TABLE test AS NOT REPLICATED;
SYSTEM DROP REPLICA 'r1' FROM ZKPATH '/clickhouse/tables/401e6a1f-9bf2-41a3-a900-abb7e94dff98/s1';
Attacher un dictionnaire existant
Rattache un dictionnaire précédemment détaché.
Syntaxe
ATTACH DICTIONARY [IF NOT EXISTS] [db.]name [ON CLUSTER cluster]
Attacher une base de données existante
Permet de rattacher une base de données précédemment détachée.
Syntaxe
ATTACH DATABASE [IF NOT EXISTS] name [ENGINE=<database engine>] [ON CLUSTER cluster]
Dernière modification le 25 juin 2026