TRUNCATE HISTORY

Содержание раздела
  1. Сохранение нумерации дельт и операций
  2. Как работает запрос
  3. Пример работы запроса
  4. Синтаксис
    1. Ключевое слово FOR SYSTEM_TIME AS OF {'YYYY-MM-DD hh:mm:ss[.SSSSSS]' | 'infinite'}
    2. Ключевое слово WHERE condition
  5. Варианты ответа
  6. Ограничения
  7. Примеры
    1. Удаление исторических записей из обычной логической таблицы
    2. Удаление исторических записей из партиционированной таблицы
    3. Удаление исторических записей из партиции
    4. Удаление исторических записей из материализованного представления
    5. Удаление текущих и исторических записей

Поддерживается в версиях: 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