TRUNCATE ACTUAL
Содержание раздела
Поддерживается в версиях: 6.3 / 6.2 / 6.1 / 6.0 / 5.8 / 5.7.
Запрос удаляет изменения данных, внесенные в логическую таблицу или материализованное представление в период с указанного момента времени (включительно).
Изменения к удалению выбираются по условию в блоке WHERE
. Условие может быть любым простым фильтром на основе всех или некоторых столбцов первичного ключа.
Удаление данных с помощью TRUNCATE ACTUAL
не версионируется системой и не записывается в журнал. Данные удаляются без возможности их восстановления средствами системы.
Запрос недоступен для логических таблиц с retention-правилами, предназначенными для остужения данных.
Запрос не удаляет метаинформацию о дельтах и операциях записи: их нумерация остается прежней.
Момент времени, с которого удаляются изменения данных, можно указать как номер дельты или дату и время. При обработке запроса с датой и временем система определяет последнюю закрытую на тот момент дельту и удаляет изменения данных, начиная с этой дельты включительно. В обоих случаях удаляются следующие изменения:
- внесенные в дельте,
- внесенные между этой и предыдущей дельтой,
- внесенные в последующих операциях записи и закрытых дельтах.
В ответе возвращается:
- пустой объект ResultSet при успешном выполнении запроса;
- исключение при неуспешном выполнении запроса.
При успешном выполнении запроса удаляются записи, добавленные в период с указанного момента времени. Записи, добавленные ранее и удаленные или замененные в этот период, восстанавливаются и становятся частью текущей версии данных.
На рисунке ниже показан пример удаления изменений данных из таблицы, в которой есть три записи по торговой точке, относящиеся к разным версиям данных в истории изменений. Предположим, что эти записи были добавлены в трех дельтах, между которыми нет других дельт. Запрос с меткой времени 2021-04-10 00:00:10
удаляет две записи из трех: вторую (от 9 апреля) и третью (от 25 августа). Вторая запись удаляется, так как она была добавлена в дельте, которая была последней на 10 апреля,
и запрос удаляет изменения, начиная с этой дельты включительно. Оставшаяся версия записи, добавленная 17 января, становится текущей для магазина 555
.
При удалении данных из логической таблицы система не обновляет материализованные представления, связанные с этой таблицей. Представления продолжают содержать данные, удаленные из таблицы.
Другие способы управления историей см. в разделе Управление историей изменений данных
Синтаксис
Удаление изменений данных, начиная с указанного момента времени (включительно):
TRUNCATE ACTUAL [db_name.]entity_name FOR SYSTEM_TIME AS OF date_time_expression
[WHERE filter_expression]
Удаление изменений данных, начиная с указанной дельты (включительно):
TRUNCATE ACTUAL [db_name.]entity_name FOR SYSTEM_TIME AS OF DELTA_NUM delta_num
[WHERE filter_expression]
Параметры:
db_name
-
Имя логической базы данных. Опционально, если выбрана логическая БД, используемая по умолчанию.
entity_name
-
Имя сущности, из которой удаляются изменения данных. Возможные значения: имя логической таблицы, имя материализованного представления.
date_time_expression
-
Момент времени в формате
'YYYY-MM-DD hh:mm:ss'
, начиная с которого удаляются изменения данных. Система определяет предпоследнюю закрытую дельту на указанный момент времени и удаляет все изменения, внесенные после закрытия этой дельты. delta_num
-
Номер дельты, начиная с которой удаляются изменения данных.
filter_expression
-
Условие выбора удаляемых изменений данных.
Условие может быть любым простым фильтром на основе всех или некоторых столбцов первичного ключа. Условия на другие столбцы не поддерживаются.
Ключевое слово FOR SYSTEM_TIME AS OF
Ключевое слово FOR SYSTEM_TIME AS OF
задает момент времени, с которого удаляются изменения. См. также параметр date_time_expression.
Ключевое слово FOR SYSTEM_TIME AS OF DELTA_NUM
Ключевое слово FOR SYSTEM_TIME AS OF DELTA_NUM
задает номер дельты, с которой удаляются изменения.
Ключевое слово WHERE
Ключевое слово WHERE
задает условие выбора удаляемых изменений. Если ключевое слово не указано, удаляются все изменения с указанного момента времени. См. также параметр filter_expression.
Ограничения
Ограничения выполнения
- Во время работы запроса не допускается выполнение BEGIN DELTA.
Ограничения сущностей
- Запрос недоступен для логических таблиц с retention-правилами, предназначенными для остужения данных.
- Запрос недоступен для несинхронизированных материализованных представлений.
- Когда изменения данных удаляются из таблицы, все связанные с ней материализованные представления остаются в прежнем состоянии и продолжают хранить данные, удаленные из таблицы.
Ограничения WHERE
- Условие
WHERE
не может содержать подзапросы, соединения и другие операции. Поддерживается только простой фильтр. - Выражение в условии
WHERE
может содержать только те столбцы, которые входят в первичный ключ таблицы (или представления).
Другие ограничения
- Удаленные данные невозможно восстановить средствами системы.
Примеры
Удаление изменений из логической таблицы с указанием дельты
Удаление изменений, в которых значение id
входит в заданный список, из таблицы sales
:
TRUNCATE ACTUAL marketing.sales FOR SYSTEM_TIME AS OF DELTA_NUM 6
WHERE id IN (111, 222, 333, 444)
Удаление изменений из логической таблицы с указанием момента времени
Удаление изменений о магазинах, расположенных в Калуге, из таблицы stores
:
TRUNCATE ACTUAL marketing.stores FOR SYSTEM_TIME AS OF '2021-04-10 01:00:00'
WHERE region = 'Калуга'
Удаление изменений из материализованного представления
Удаление изменений, в которых значение id
больше 1001, из материализованного представления sales_and_stores
:
TRUNCATE ACTUAL marketing.sales_by_stores FOR SYSTEM_TIME AS OF '2022-04-23 15:15:14'
WHERE id > 1001