TRUNCATE HISTORY
Содержание раздела
Поддерживается в версиях: 7.6 / 7.5 / 7.4 / 7.3 / 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.
В зависимости от указанных параметров запрос удаляет исторические или все записи сущности, соответствующие указанному условию, освобождая дисковое пространство в датасорсах.
Запрос может содержать индексированные и именованные параметры.
Удаление данных с помощью TRUNCATE HISTORY не версионируется системой и не может быть отменено.
Метаинформацию об удаленных записях можно удалить запросом TRUNCATE TSLOG.
Поддерживаемые сущности
Удаление записей доступно из сущностей:
Как работает запрос
Сохранение нумерации дельт и операций
Запрос не удаляет метаинформацию о дельтах и операциях записи: их нумерация остается прежней.
Режимы работы запроса
Запрос работает по-разному в зависимости от указанных параметров, как показано в таблице ниже.
| Сущность | Запрос с меткой времени | Запрос с infinite |
|---|---|---|
| Логическая таблица, материализованное представление | Удаляет записи, ставшие историческими до указанного момента (включительно) | Удаляет текущие и исторические записи независимо от момента их появления, обновления или удаления |
| Снапшот-таблица | Удаляет информацию о записях, удаленных до указанного момента (включительно) | Удаляет текущие записи и информацию об удаленных записях независимо от момента их появления, обновления или удаления |
Удаление записей с infinite приводит к обнулению значения ROWS_COUNT в статистике целевой сущности на всех нодах Prostore.
Пример работы запроса
На рисунке ниже показан пример работы TRUNCATE HISTORY для логической таблицы, содержащей три записи по торговой точке (в терминологии истории данных — три состояния объекта):
- две записи, добавленные в январе и апреле и ставшие историческими в апреле и августе соответственно;
- одна запись, добавленная в августе и остающаяся текущей по настоящее время.
Запрос TRUNCATE HISTORY с меткой времени 2021-04-10 00:00:10 к таблице удаляет записи, которые были историческими по состоянию на 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
Удаление текущих записей и информации об удалениях из снапшот-таблицы
Удаление всех записей (включая информацию об их удалениях), где идентификатор равен 1005 или 105, из снапшот-таблицы stores_snapshot:
TRUNCATE HISTORY marketing.stores_snapshot FOR SYSTEM_TIME AS OF 'infinite'
WHERE id = 1005 or id = 105