Атомарная замена таблицы
Doris поддерживает атомарную замену одной таблицы OLAP другой. Один оператор ALTER TABLE позволяет поменять имена таблиц местами или полностью заменить таблицу без перерыва в доступности запросов, возникающего при традиционном подходе «сначала удалить, затем загрузить».
Сценарии применения
Используйте атомарную замену таблицы, когда нужно перезаписать все данные в таблице так, чтобы промежуточное состояние с пустой таблицей не было видно пользователям.
| Сценарий | Рекомендуемый подход |
|---|---|
| Полная перезапись таблицы (например, полное заполнение данных в автономном режиме) | Создайте новую таблицу с помощью CREATE TABLE LIKE, загрузите новые данные и атомарно замените старую таблицу |
| Замена только определённой партиции | См. Временные партиции |
| Сохранение старой таблицы для отката | Используйте swap = true. Данные старой таблицы будут доступны под именем новой таблицы |
| Старая таблица после замены не нужна | Используйте swap = false. Старая таблица будет сразу удалена |
Порядок действий
Рассмотрим пример замены старой таблицы tbl1 таблицей с новыми данными. Стандартная последовательность действий:
-
Создайте новую таблицу на основе схемы старой таблицы:
CREATE TABLE tbl2 LIKE tbl1; -
Загрузите новые данные в новую таблицу
tbl2. -
Выполните атомарную замену:
ALTER TABLE tbl1 REPLACE WITH TABLE tbl2
[PROPERTIES('swap' = 'true')]; -
Проверьте результат с учётом значения параметра
swap(подробности приведены ниже).
Синтаксис
ALTER TABLE [db.]tbl1 REPLACE WITH TABLE tbl2
[PROPERTIES('swap' = 'true')];
Назначение: заменить таблицу tbl1 таблицей tbl2. Параметр swap определяет, что произойдёт со старой таблицей после замены.
Поведение параметра swap
| Значение swap | Данные tbl1 после замены | Состояние tbl2 после замены | Типичное применение |
|---|---|---|---|
true (по умолчанию) | Исходные данные tbl2 | Сохраняется и содержит исходные данные tbl1 (таблицы меняются местами) | Сохранение старых данных для отката или сравнения |
false | Исходные данные tbl2 | Удалена без возможности восстановления | Нужны только новые данные; старую таблицу можно удалить |
Принцип работы
Атомарная замена объединяет несколько шагов DDL в одну атомарную операцию. Для внешних запросов она выглядит как мгновенное переключение.
-
При
swap = true:- Переименовать таблицу B в таблицу A.
- Переименовать таблицу A в таблицу B.
-
При
swap = false:- Удалить таблицу A.
- Переименовать таблицу B в таблицу A.
Поскольку эти шаги выполняются как атомарная транзакция на уровне метаданных, внешние запросы не видят промежуточных состояний.
Примечания
- Замена поддерживается только между двумя таблицами OLAP. Другие типы таблиц не поддерживаются.
- Система не проверяет, совпадают ли схемы двух таблиц. Вы должны самостоятельно обеспечить совместимость схем.
- При
swap = falseзаменяемая старая таблица сразу удаляется и не подлежит восстановлению. Используйте этот вариант с осторожностью. - Замена не изменяет настройки прав доступа, поскольку права проверяются по имени таблицы. После замены новая таблица автоматически наследует права, связанные с исходным именем таблицы.
Часто задаваемые вопросы
Вопрос 1: Влияет ли замена на запросы, которые уже выполняются?
Ответ: Замена является атомарной операцией на уровне метаданных. Уже отправленные запросы завершают выполнение на исходных данных таблицы; новые запросы обращаются к данным после замены.
Вопрос 2: Можно ли заменить одну таблицу другой, если у них различаются столбцы, индексы или партиции?
Ответ: Да. Система не проверяет совпадение схем, но следует обеспечивать их совместимость. Иначе зависимые запросы и приложения могут перестать работать из-за изменений имён или типов столбцов.
Вопрос 3: Можно ли восстановить исходные данные таблицы после замены?
Ответ: При swap = true исходные данные таблицы сохраняются под исходным именем tbl2 и могут быть восстановлены. При swap = false исходная таблица удаляется и не подлежит восстановлению.
Вопрос 4: Можно ли использовать атомарную замену для партиций?
Ответ: Да. Для атомарной перезаписи на уровне партиций используйте механизм временных партиций.
Связанные документы
- Временные партиции: атомарная перезапись на уровне партиций
CREATE TABLE LIKE: быстрое создание новой таблицы на основе схемы существующей таблицы