TRUNCATE ACTUAL
Содержание раздела
Запрос удаляет актуальные и архивные записи логической таблицы или материализованного представления, начиная с указанного момента времени (включительно). Записи к удалению выбираются по условию в блоке WHERE
.
Момент времени, с которого нужно удалить записи, можно указать как дату и время или номер дельты. Если в запросе указаны дата и время, система определяет последнюю закрытую на тот момент дельту и удаляет данные, начиная с этой дельты включительно.
Удаление данных доступно в ADB, ADP и ADQM.
Данные удаляются вне механизма дельт и не подлежат восстановлению средствами системы.
В ответе возвращается:
- пустой объект ResultSet при успешном выполнении запроса;
- исключение при неуспешном выполнении запроса.
При успешном выполнении запроса выбранные записи удаляются, а записи, ставшие архивными в указанную дельту (или в последнюю дельту на указанные дату и время), снова становятся актуальными.
Если записи удаляются из логической таблицы, система не обновляет связанные материализованные представления, которые синхронизируются с этой таблицей. Представления продолжают содержать данные, удаленные из таблицы.
В отличие от ERASE DELTA, запрос TRUNCATE ACTUAL
не удаляет информацию о дельтах: их нумерация остается прежней, как и данные других таблиц и представлений, не затронутых запросом.
На рисунке ниже показан пример удаления записей таблицы, в которой есть три версии записей по торговой точке — две архивные и одна актуальная. Предположим, что версии записей добавлены в трех дельтах, и между этими дельтами нет других дельт. Запрос с меткой времени 2021-04-10 00:00:10
удаляет две версии записей из трех: вторую (архивную, добавленную 9 апреля) и третью (актуальную, добавленную 25 августа). Вторая версия удаляется, так на 10 апреля последней была дельта со второй версией записи, и с нее включительно удаляются записи. Первая версия записи, добавленная 17 января, становится актуальной.
Чтобы удалить архивные и актуальные записи об объекте за все время или удалить архивные записи старше определенного момента времени, выполните запрос TRUNCATE HISTORY.
Синтаксис
Удаление данных, начиная с указанного момента времени (включительно):
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
-
Условие выбора удаляемых записей.
Условие может быть любым plain-выражением на основе всех или некоторых столбцов первичного ключа. Другие столбцы таблицы или представления не могут включаться в условие.
Ограничения
Ограничения выполнения
- Во время работы запроса не допускается выполнение запросов BEGIN DELTA.
- Запрос не может быть выполнен в сервисной базе данных
INFORMATION_SCHEMA
.
Ограничения сущностей
- Недоступно удаление данных из несинхронизированного материализованного представления.
- Недоступно удаление данных из логической таблицы, с которой связано несинхронизированное материализованное представление.
- При удалении данных из таблицы все связанные с ней материализованные представления остаются в прежнем состоянии и продолжают хранить данные, удаленные из таблицы.
Другие ограничения
- Запрос не поддерживает удаление данных из ADG.
- Удаление данных происходит вне механизма дельт и не может быть отменено.
- Условие
WHERE
не может содержать подзапросы, соединения и другие операции. Поддерживается только plain-условие. - Выражение в условии
WHERE
может содержать только те столбцы, которые входят в первичный ключ таблицы (представления).
Примеры
Удаление данных логической таблицы с указанием дельты
Удаление записей таблицы sales
, в которых значение id
входит в заданный список:
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 = 'Калуга'
Удаление данных материализованного представления
Удаление записей представления sales_and_stores
, в которых значение id
больше 1001:
TRUNCATE ACTUAL marketing.sales_and_stores FOR SYSTEM_TIME AS OF '2022-04-23 15:15:14'
WHERE id > 1001