Вопрос
Как использовать команду EXCHANGE, чтобы поменять местами названия таблиц?
Ответ
Команда EXCHANGE полезна, когда нужно заменить текущую таблицу другой — временной таблицей, в которой, возможно, были изменены первичный ключ или другие настройки.
В отличие от команды RENAME, это происходит атомарно.
Она также полезна, если у вас есть materialized views, срабатывающие на исходной таблице, и вы хотите избежать пересоздания представления.
Ниже приведён простой пример того, как это работает и как это проверить:
- Создайте тестовую базу данных
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 строка в наборе. Elapsed: 0.002 sec.