TRUNCATE HISTORY
Содержание раздела
Поддерживается в версиях: 7.2 / 7.1 / 7.0 / 6.12 / 6.11 / 6.10 / 6.9 / 6.8 / 6.7 / 6.6 / 6.5 / 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.
Запрос удаляет записи логической таблицы или материализованного представления. Записи удаляются окончательно, освобождая дисковое пространство в датасорсах.
Запрос удаляет записи, соответствующие условию WHERE
:
- исторические записи на указанный момент времени — если указана метка времени;
- все текущие и исторические записи — если указано ключевое слово
infinite
.
Удаление данных с помощью TRUNCATE HISTORY
не версионируется системой и не может быть отменено.
Сохранение нумерации дельт и операций
Запрос не удаляет метаинформацию о дельтах и операциях записи: их нумерация остается прежней.
Как работает запрос
Запрос удаляет записи согласно условию WHERE
(включая холодные и партиционированные):
- если указана метка времени, удаляются записи, ставшие неактуальными в последнюю операцию записи на тот момент или ранее;
- если указано ключевое слово
infinite
, удаляются все записи независимо от их актуальности.
Для партиционированной таблицы удаляются записи из всех ее партиций.
Удаление записей с infinite
приводит к обнулению значения ROWS_COUNT в статистике целевой сущности на всех нодах Prostore. Подробнее см. в разделе О статистике.
Пример работы запроса
Пример работы запроса TRUNCATE HISTORY
показан на рисунке ниже.
Логическая таблица содержит три версии записи для одной торговой точки, созданные в январе, апреле и августе. Предположим, что каждая версия записи была добавлена в отдельной операции записи или в отдельной дельте без промежуточных дельт между ними.
Запрос TRUNCATE HISTORY
с меткой времени '2021-04-10 00:00:10'
удаляет только первую версию, так как на тот момент времени вторая версия считалась текущей и исторической считалась только первая.
Удаление исторических записей по состоянию на 2021-04-10 00:00:10
Синтаксис
TRUNCATE HISTORY [db_name.]entity_name
FOR SYSTEM_TIME AS OF {'YYYY-MM-DD hh:mm:ss[.SSSSSS]' | 'infinite'}
[WHERE condition]
Параметры:
db_name
-
Имя логической базы данных. Опционально, если выбрана логическая БД, используемая по умолчанию.
entity_name
-
Имя логической таблицы или материализованного представления, откуда удаляются записи. Логическая таблица может быть любого вида.
Ключевое слово FOR SYSTEM_TIME AS OF {'YYYY-MM-DD hh:mm:ss[.SSSSSS]' | 'infinite'}
Задает режим удаления записей. Возможные значения:
YYYY-MM-DD hh:mm:ss[.SSSSSS]
— удаление записей, которые были историческими по состоянию на указанный момент времени;infinite
— удаление всех текущих и исторических записей.
Ключевое слово WHERE condition
Задает условие выбора удаляемых записей. Поддерживается только простой фильтр без подзапросов, соединений и других операций.
Варианты ответа
В ответе возвращается:
- пустой объект ResultSet при успешном выполнении запроса;
- исключение при неуспешном выполнении запроса.
Ограничения
- Условие
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'
Удаление исторических записей из материализованного представления
Удаление записей, имеющих значение store_id
больше 100
и неактуальных на момент времени '2019-12-23 15:15:14.736193'
, из материализованного представления sales_by_stores
:
TRUNCATE HISTORY matview_db.sales_by_stores FOR SYSTEM_TIME AS OF '2019-12-23 15:15:14.736193'
WHERE store_id > 100
Удаление текущих и исторических записей
Удаление всех записей, где значение id
равно 1005
или 105
, из таблицы sales
:
TRUNCATE HISTORY marketing.sales FOR SYSTEM_TIME AS OF 'infinite'
WHERE id = 1005 or id = 105