メインコンテンツへスキップ

質問

テーブル名を入れ替えるには、EXCHANGE コマンドをどのように使用しますか?

回答

EXCHANGE コマンドは、主キーやその他の設定が更新された可能性のある一時テーブルに、現在のテーブルを切り替える必要がある場合に便利です。 これは RENAME コマンドとは異なり、アトミックに実行されます。 また、ソーステーブルをトリガーとして動作する materialized view があり、その再構築を避けたい場合にも便利です。 以下に、動作の仕組みとテスト方法を示す簡単な例を示します。
  • サンプルデータベースを作成する
create database db1;
  • サンプルテーブルを作成
create table db1.table1_exchange
(
 id Int32,
 string_field String
)
engine = MergeTree()
order by id;
  • サンプル行を挿入する
insert into db1.table1_exchange
values
(1, 'a');
  • EXCHANGE対象の一時テーブルの例を作成する
create table db1.table1_exchange_temp
(
 id Int32,
 string_field String
)
engine = MergeTree()
order by id;
  • 一時テーブルにサンプルの行を挿入する
insert into db1.table1_exchange_temp
values
(2, 'b');
  • テーブルを切り替えるには EXCHANGE コマンドを実行します
exchange tables db1.table1_exchange and db1.table1_exchange_temp;
  • テーブルが入れ替わり、行も入れ替わっていることを確認する
select * from db1.table1_exchange;
┌─id─┬─string_field─┐
│  2 │ b            │
└────┴──────────────┘

1 row in set. Elapsed: 0.002 sec. 
最終更新日 2026年6月10日