TRUNCATE ACTUAL

Содержание раздела
  1. Синтаксис
  2. Ограничения
    1. Ограничения выполнения
    2. Ограничения сущностей
    3. Другие ограничения
  3. Примеры
    1. Удаление данных логической таблицы с указанием дельты
    2. Удаление данных логической таблицы с указанием момента времени
    3. Удаление данных материализованного представления

Запрос удаляет актуальные и архивные записи логической таблицы или материализованного представления, начиная с указанного момента времени (включительно). Записи к удалению выбираются по условию в блоке WHERE.

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

Удаление данных доступно в ADB, ADP и ADQM.

Данные удаляются вне механизма дельт и не подлежат восстановлению средствами системы.

В ответе возвращается:

  • пустой объект ResultSet при успешном выполнении запроса;
  • исключение при неуспешном выполнении запроса.

При успешном выполнении запроса выбранные записи удаляются, а записи, ставшие архивными в указанную дельту (или в последнюю дельту на указанные дату и время), снова становятся актуальными.

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

В отличие от ERASE DELTA, TRUNCATE ACTUAL не удаляет информацию о дельтах: их нумерация остается прежней, как и данные других таблиц и представлений, не затронутых запросом.

На рисунке ниже показан пример удаления записей таблицы, в которой есть три версии записей по торговой точке — две архивные и одна актуальная. Предположим, что версии записей добавлены в трех дельтах, и между этими дельтами нет других дельт. Запрос с меткой времени 2021-04-10 00:00:10 удаляет две версии записей из трех: вторую (архивную, добавленную 9 апреля) и третью (актуальную, добавленную 25 августа). Вторая версия удаляется, так на 10 апреля последней была дельта со второй версией записи, и с нее включительно удаляются записи. Первая версия записи, добавленная 17 января, становится актуальной.

Удаление записей с 2021-04-10 00:00:10

Чтобы удалить архивные и актуальные записи об объекте за все время или удалить архивные записи старше определенного момента времени, выполните 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.

Ограничения сущностей

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

Другие ограничения

  • Запрос не поддерживает удаление данных из 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