TRUNCATE HISTORY

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

Поддерживается в версиях:  6.4 / 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.

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

Изменения к удалению выбираются по условию, указанному в блоке 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

Удаление из партиционированной таблицы

Удаление изменений, имеющих значение store_id >= 100 и неактуальных на момент времени '2023-05-11 12:49:54', из партиционированной таблицы sales_partitioned:

TRUNCATE HISTORY marketing.sales_partitioned FOR SYSTEM_TIME AS OF '2023-05-11 12:49:54'
WHERE store_id >= 100

Удаление из партиции

Удаление изменений, неактуальных на момент времени '2023-05-12 15:15:14', из партиции sales_feb_2023:

TRUNCATE HISTORY marketing.sales_feb_2023 FOR SYSTEM_TIME AS OF '2023-05-12 15:15:14'

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

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

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