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