Перейти к содержимому
Последнее обновление

Атомарная замена таблицы

Doris поддерживает атомарную замену одной таблицы OLAP другой. Один оператор ALTER TABLE позволяет поменять имена таблиц местами или полностью заменить таблицу без перерыва в доступности запросов, возникающего при традиционном подходе «сначала удалить, затем загрузить».

Сценарии применения​

Используйте атомарную замену таблицы, когда нужно перезаписать все данные в таблице так, чтобы промежуточное состояние с пустой таблицей не было видно пользователям.

СценарийРекомендуемый подход
Полная перезапись таблицы (например, полное заполнение данных в автономном режиме)Создайте новую таблицу с помощью CREATE TABLE LIKE, загрузите новые данные и атомарно замените старую таблицу
Замена только определённой партицииСм. Временные партиции
Сохранение старой таблицы для откатаИспользуйте swap = true. Данные старой таблицы будут доступны под именем новой таблицы
Старая таблица после замены не нужнаИспользуйте swap = false. Старая таблица будет сразу удалена

Порядок действий​

Рассмотрим пример замены старой таблицы tbl1 таблицей с новыми данными. Стандартная последовательность действий:

  1. Создайте новую таблицу на основе схемы старой таблицы:

    CREATE TABLE tbl2 LIKE tbl1;
  2. Загрузите новые данные в новую таблицу tbl2.

  3. Выполните атомарную замену:

    ALTER TABLE tbl1 REPLACE WITH TABLE tbl2
    [PROPERTIES('swap' = 'true')];
  4. Проверьте результат с учётом значения параметра 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:

    1. Переименовать таблицу B в таблицу A.
    2. Переименовать таблицу A в таблицу B.
  • При swap = false:

    1. Удалить таблицу A.
    2. Переименовать таблицу B в таблицу A.

Поскольку эти шаги выполняются как атомарная транзакция на уровне метаданных, внешние запросы не видят промежуточных состояний.

Примечания​

  • Замена поддерживается только между двумя таблицами OLAP. Другие типы таблиц не поддерживаются.
  • Система не проверяет, совпадают ли схемы двух таблиц. Вы должны самостоятельно обеспечить совместимость схем.
  • При swap = false заменяемая старая таблица сразу удаляется и не подлежит восстановлению. Используйте этот вариант с осторожностью.
  • Замена не изменяет настройки прав доступа, поскольку права проверяются по имени таблицы. После замены новая таблица автоматически наследует права, связанные с исходным именем таблицы.

Часто задаваемые вопросы​

Вопрос 1: Влияет ли замена на запросы, которые уже выполняются?

Ответ: Замена является атомарной операцией на уровне метаданных. Уже отправленные запросы завершают выполнение на исходных данных таблицы; новые запросы обращаются к данным после замены.

Вопрос 2: Можно ли заменить одну таблицу другой, если у них различаются столбцы, индексы или партиции?

Ответ: Да. Система не проверяет совпадение схем, но следует обеспечивать их совместимость. Иначе зависимые запросы и приложения могут перестать работать из-за изменений имён или типов столбцов.

Вопрос 3: Можно ли восстановить исходные данные таблицы после замены?

Ответ: При swap = true исходные данные таблицы сохраняются под исходным именем tbl2 и могут быть восстановлены. При swap = false исходная таблица удаляется и не подлежит восстановлению.

Вопрос 4: Можно ли использовать атомарную замену для партиций?

Ответ: Да. Для атомарной перезаписи на уровне партиций используйте механизм временных партиций.

  • Временные партиции: атомарная перезапись на уровне партиций
  • CREATE TABLE LIKE: быстрое создание новой таблицы на основе схемы существующей таблицы