Skip to main content Link Menu Expand (external link) Document Search Copy Copied

Вы находитесь на странице архива. Актуальная документация доступна по ссылке.

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 HISTORY не версионируется системой и не записывается в журнал. Данные удаляются без возможности их восстановления средствами системы.

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

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

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

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

  • пустой объект 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 не может содержать подзапросы, соединения и другие операции. Поддерживается только plain-условие.
  • Выражение в условии 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