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'
удаляет первую запись: на этот момент времени последней закрытой дельтой была дельта со второй записью и неактуальным изменением была только первая запись.
Удаление данных с помощью 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