Skip to main content
たとえばデータベースを別のサーバーに移行する際などに、テーブルまたは Dictionary をアタッチします。 構文
このクエリはディスク上にデータを作成しません。データはすでに適切な場所に存在していることを前提とし、指定したテーブル、Dictionary、またはデータベースに関する情報をサーバーに追加するだけです。ATTACHクエリを実行すると、サーバーはそのテーブル、Dictionary、またはデータベースの存在を認識します。 テーブルが以前にデタッチされていた (DETACHクエリ) 場合、つまりその構造が既知である場合は、構造を定義せずに短縮記法を使用できます。

既存のテーブルをアタッチ

構文
このクエリは、サーバーの起動時に使用されます。サーバーはテーブルのメタデータを ATTACH クエリを含むファイルとして保存しており、起動時にそれらをそのまま実行します (ただし一部のシステムテーブルは例外で、サーバー上で明示的に作成されます) 。 テーブルが恒久的にデタッチされている場合、サーバーの起動時に再アタッチされることはないため、ATTACH クエリを明示的に実行する必要があります。

新しいテーブルを作成してデータをアタッチする

テーブルデータへのパスを指定する場合

このクエリは、指定した構造で新しいテーブルを作成し、user_files 内の指定したディレクトリにあるテーブルデータをアタッチします。 このクエリを実行するには、ユーザーに READ ON FILE および WRITE ON FILE 権限が必要です。ディレクトリを読み取り、それを新しいテーブルのデータパスに移動するためです。 構文
例
Query
Response

指定したテーブル UUID を使用する

このクエリは、指定された 構造 を持つ新しいテーブルを作成し、指定した UUID を持つテーブルのデータをアタッチします。 これは Atomic データベースエンジンでサポートされています。 構文

MergeTree テーブルを ReplicatedMergeTree として アタッチ

レプリケーションされていない MergeTree テーブルを ReplicatedMergeTree として アタッチ できます。ReplicatedMergeTree テーブルは、default_replica_path および default_replica_name Settings の値を使って作成されます。レプリケートされたテーブルを通常の MergeTree として アタッチ することも可能です。 この変換は、Atomic および Ordinary データベース内のテーブルでサポートされています。Ordinary データベース内のテーブルには UUID がないため、変換時に UUID が生成されます。この UUID を用いて default_replica_path が一度だけ展開され、その結果得られたパスが変換後のテーブルのエンジン引数に明示的に保存されます。このようなテーブルにレプリカを追加するには、ReplicatedMergeTree エンジンの第 1 引数にこのパスを明示的に指定してください。このパスは system.replicas の zookeeper_path カラムで確認できます。保存されたパスには {uuid} マクロが含まれないため、このようなテーブルが所有する znode は、ロードのたびにパスを default_replica_path と改めて照合することで特定されます。このテンプレートとの照合ができない場合 (たとえば {uuid} が複数回展開される場合)、変換は拒否されます。なお、default_replica_name 内での {uuid} の使用は、いずれの変換でもサポートされていません。 このクエリでは、ZooKeeper 内のテーブルデータには影響しない点に注意してください。つまり、アタッチ 後に SYSTEM RESTORE REPLICA を使用して ZooKeeper にメタデータを追加するか、SYSTEM DROP REPLICA ... FROM ZKPATH ... でクリアする必要があります。 既存の ReplicatedMergeTree テーブルにレプリカを追加しようとしている場合は、変換後の MergeTree テーブル内のローカルデータはすべてデタッチされることに注意してください。 構文
テーブルをレプリケーション対応に変換する
テーブルを非レプリケート化する テーブルのZooKeeperのパスとレプリカ名を取得します:
Query
Response
テーブルをレプリケーションなしとしてアタッチし、ZooKeeper からレプリカのデータを削除します:
Query

既存のDictionaryをアタッチ

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

既存のデータベースをアタッチ

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