TRUNCATE ACTUAL

Содержание раздела
  1. Синтаксис
    1. Ключевое слово FOR SYSTEM_TIME AS OF
    2. Ключевое слово FOR SYSTEM_TIME AS OF DELTA_NUM
    3. Ключевое слово WHERE
  2. Ограничения
    1. Ограничения выполнения
    2. Ограничения сущностей
    3. Ограничения WHERE
    4. Другие ограничения
  3. Примеры
    1. Удаление изменений из логической таблицы с указанием дельты
    2. Удаление изменений из логической таблицы с указанием момента времени
    3. Удаление изменений из материализованного представления

Поддерживается в версиях:  6.1 / 6.0 / 5.8 / 5.7.

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

Изменения к удалению выбираются по условию в блоке WHERE. Условие может быть любым plain-выражением на основе всех или некоторых столбцов первичного ключа.

Удаление данных с помощью TRUNCATE ACTUAL не версионируется системой и не записывается в журнал. Данные удаляются без возможности их восстановления средствами системы.

Запрос не удаляет метаинформацию о дельтах и операциях записи: их нумерация остается прежней.

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

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

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

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

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

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

Удаление изменений, начиная с 2021-04-10 00:00:10

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

Другие способы управления историей см. в разделе Управление историей изменений данных

Синтаксис

Удаление изменений данных, начиная с указанного момента времени (включительно):

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-выражением на основе всех или некоторых столбцов первичного ключа. Условия на другие столбцы не поддерживаются.

Ключевое слово 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.

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

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

Ограничения 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_and_stores FOR SYSTEM_TIME AS OF '2022-04-23 15:15:14'
WHERE id > 1001