TRUNCATE HISTORY
Содержание раздела
Поддерживается в версиях: 6.2 / 6.1.1 / 6.0 / 5.8 / 5.7 / 5.6.1 / 5.5 / 5.4 / 5.3 / 5.2 / 5.1 / 5.0.
Запрос удаляет:
- изменения данных, неактуальные на указанный момент времени (если в запросе указана метка времени);
- все изменения данных (если в запросе указано ключевое слово
infinite).
Изменения к удалению выбираются по условию в блоке WHERE. Условие может быть любым plain-выражением.
Запрос поддерживает удаление изменений только из логических таблиц. Удаление изменений из материализованных представлений недоступно.
Если в запросе указана метка времени, система определяет последнюю закрытую на этот момент дельту и удаляет изменения, которые стали неактуальными в этой дельте и ранее.
В ответе возвращается:
- пустой объект 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