TRUNCATE HISTORY

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

Поддерживается в версиях:  6.3 / 6.2 / 6.1 / 6.0 / 5.8 / 5.7 / 5.6 / 5.5 / 5.4 / 5.3 / 5.2 / 5.1 / 5.0.

Запрос удаляет:

  • изменения данных, неактуальные на указанный момент времени — если в запросе указана метка времени;
  • все изменения данных — если в запросе указано ключевое слово infinite.

Удаление изменений доступно только для логических таблиц.
TRUNCATE HISTORY не удаляет изменения из материализованных представлений.

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

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

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

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

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

Удаление изменений, неактуальных на 2021-04-10 00:00:10

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

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

Синтаксис

TRUNCATE HISTORY [db_name.]table_name FOR SYSTEM_TIME AS OF date_time_expression
[WHERE filter_expression]

Параметры:

db_name

Имя логической базы данных. Опционально, если выбрана логическая БД, используемая по умолчанию.

table_name

Имя логической таблицы, из которой удаляются изменения данных.

date_time_expression

Выражение для выбора удаляемых изменений:

  • 'YYYY-MM-DD hh:mm:ss' — удаление изменений, неактуальных на указанный момент времени;
  • 'infinite' — удаление всех изменений.
filter_expression

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

Ключевое слово FOR SYSTEM_TIME AS OF

Ключевое слово FOR SYSTEM_TIME AS OF задает момент времени, до которого удаляются изменения. См. также параметр date_time_expression.

Ключевое слово WHERE

Ключевое слово WHERE задает условие выбора удаляемых изменений.

Ограничения

  • Условие WHERE не может содержать подзапросы, соединения и другие операции. Поддерживается только простой фильтр.
  • Запрос не поддерживает удаление данных из материализованных представлений.
  • Удаленные данные невозможно восстановить средствами системы.

Примеры

Удаление неактуальных изменений

Удаление изменений, имеющих значение product_units меньше 10 и неактуальных на момент времени '2019-12-23 15:15:14', из таблицы sales:

TRUNCATE HISTORY marketing.sales FOR SYSTEM_TIME AS OF '2019-12-23 15:15:14'
WHERE product_units < 10

Удаление всех изменений

Удаление всех изменений, где значение id равно 1005 или 105, из таблицы sales:

TRUNCATE HISTORY marketing.sales FOR SYSTEM_TIME AS OF 'infinite'
WHERE id = 1005 or id = 105