> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-fix-nav-issues.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

> ATTACH に関するドキュメント

# ATTACH ステートメント

たとえばデータベースを別のサーバーに移行する際などに、テーブルまたは Dictionary をアタッチします。

**構文**

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

このクエリはディスク上にデータを作成しません。データはすでに適切な場所に存在していることを前提とし、指定したテーブル、Dictionary、またはデータベースに関する情報をサーバーに追加するだけです。`ATTACH`クエリを実行すると、サーバーはそのテーブル、Dictionary、またはデータベースの存在を認識します。

テーブルが以前にデタッチされていた ([DETACH](/ja/reference/statements/detach)クエリ) 場合、つまりその構造が既知である場合は、構造を定義せずに短縮記法を使用できます。

<div id="attach-existing-table">
  ## 既存のテーブルをアタッチ
</div>

**構文**

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

このクエリは、サーバーの起動時に使用されます。サーバーはテーブルのメタデータを `ATTACH` クエリを含むファイルとして保存しており、起動時にそれらをそのまま実行します (ただし一部のシステムテーブルは例外で、サーバー上で明示的に作成されます) 。

テーブルが恒久的にデタッチされている場合、サーバーの起動時に再アタッチされることはないため、`ATTACH` クエリを明示的に実行する必要があります。

<div id="create-new-table-and-attach-data">
  ## 新しいテーブルを作成してデータをアタッチする
</div>

<div id="with-specified-path-to-table-data">
  ### テーブルデータへのパスを指定する場合
</div>

このクエリは、指定した構造で新しいテーブルを作成し、`user_files` 内の指定したディレクトリにあるテーブルデータをアタッチします。

**構文**

```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 │
└──────┴────┘
```

<div id="with-specified-table-uuid">
  ### 指定したテーブル UUID を使用する
</div>

このクエリは、指定された 構造 を持つ新しいテーブルを作成し、指定した UUID を持つテーブルのデータをアタッチします。
これは [Atomic](/ja/reference/engines/database-engines/atomic) データベースエンジンでサポートされています。

**構文**

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

<div id="attach-mergetree-table-as-replicatedmergetree">
  ## MergeTree テーブルを ReplicatedMergeTree として アタッチ
</div>

レプリケーションされていない MergeTree テーブルを ReplicatedMergeTree として アタッチ できます。ReplicatedMergeTree テーブルは、`default_replica_path` および `default_replica_name` Settings の値を使って作成されます。レプリケートされたテーブルを通常の MergeTree として アタッチ することも可能です。

このクエリでは、ZooKeeper 内のテーブルデータには影響しない点に注意してください。つまり、アタッチ 後に `SYSTEM RESTORE REPLICA` を使用して ZooKeeper にメタデータを追加するか、`SYSTEM DROP REPLICA ... FROM ZKPATH ...` でクリアする必要があります。

既存の ReplicatedMergeTree テーブルにレプリカを追加しようとしている場合は、変換後の MergeTree テーブル内のローカルデータはすべてデタッチされることに注意してください。

**構文**

```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';
```

<div id="attach-existing-dictionary">
  ## 既存のDictionaryをアタッチ
</div>

以前にデタッチされたDictionaryをアタッチします。

**構文**

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

<div id="attach-existing-database">
  ## 既存のデータベースをアタッチ
</div>

以前にデタッチされたデータベースをアタッチします。

**構文**

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