TRUNCATE ACTUAL
Содержание раздела
Поддерживается в версиях: 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.
Запрос удаляет текущие и исторические записи новее указанного момента времени. Записи удаляются окончательно, освобождая дисковое пространство в датасорсах.
Из снапшот-таблиц удаляются:
- все текущие записи (независимо от момента их появления);
- информация об удаленных записях, которые были добавлены или обновлены после указанного момента.
Запрос может содержать индексированные и именованные параметры.
Удаление данных с помощью TRUNCATE ACTUAL не версионируется системой и не может быть отменено.
Поддерживаемые сущности
Удаление записей доступно из сущностей:
Удаление недоступно, если таблица (в случае партиционированной таблицы — хотя бы одна ее партиция) имеет retention-правила для остужения данных.
Как работает запрос
Сохранение нумерации дельт и операций
Запрос не удаляет метаинформацию о дельтах и операциях записи: их нумерация остается прежней.
Порядок удаления записей
Запрос удаляет записи логических таблиц и материализованных представлений в следующем порядке:
- Удаляются текущие и исторические записи, соответствующие условию
WHEREи добавленные (в случае текущих записей) или ставшие историческими (в случае исторических записей):- [указана метка времени] после указанного момента;
- [указана дельта] после указанной дельты.
- Восстанавливаются и становятся текущими исторические записи, соответствующие условию
WHEREи действовавшие на указанный момент времени или дельту, но замененные или удаленные позже. - Обнуляется ROWS_COUNT в статистике сущности на всех нодах Prostore.
Для партиционированных таблиц удаляются записи всех ее партиций.
При удалении записей логической таблицы запрос не удаляет их данные из связанных материализованных представлений.
Запрос удаляет записи снапшот-таблиц в следующем порядке:
- Удаляются все текущие записи, соответствующие условию
WHERE. - Удаляется информация об удаленных записях, которые соответствуют условию
WHEREи были добавлены или обновлены:- [указана метка времени] после указанного момента;
- [указана дельта] после указанной дельты.
Пример работы запроса
На рисунке ниже показан пример работы TRUNCATE ACTUAL для логической таблицы, содержащей три записи по торговой точке (в терминологии истории данных — три состояния объекта):
- две записи, добавленные в январе и апреле и ставшие историческими в апреле и августе соответственно;
- одна запись, добавленная в августе и остающаяся текущей по настоящее время.
Запрос TRUNCATE ACTUAL с меткой времени 2021-03-07 00:00:10 к таблице удаляет записи, добавленные после 7 марта (в апреле и августе). Оставшаяся январская запись становится текущей.
Удаление текущих и исторических записей после 2021-03-07 00:00:10
Синтаксис
Удаление записей после указанного момента времени:
TRUNCATE ACTUAL [db_name.]entity_name
FOR SYSTEM_TIME AS OF 'YYYY-MM-DD hh:mm:ss[.SSSSSS]'
[WHERE condition]
Удаление записей после указанной дельты:
TRUNCATE ACTUAL [db_name.]entity_name
FOR SYSTEM_TIME AS OF DELTA_NUM delta_num
[WHERE condition]
Параметры:
db_name-
Имя логической базы данных. Опционально, если выбрана логическая БД, используемая по умолчанию.
entity_name-
Имя сущности, из которой удаляются записи.
Возможные значения:
- имя логической таблицы,
- имя снапшот-таблицы,
- имя материализованного представления.
Логическая таблица может быть любого вида.
Ключевое слово FOR SYSTEM_TIME AS OF 'YYYY-MM-DD hh:mm:ss[.SSSSSS]'
Задает момент времени, после которого удаляются записи (исключая границу). Значение можно задать в любом из поддерживаемых форматов даты и времени.
Подробнее о порядке выбора записей к удалению см. в секции Как работает запрос.
Ключевое слово FOR SYSTEM_TIME AS OF DELTA_NUM delta_num
Задает номер дельты, после которой удаляются записи (исключая границу). Подробнее о порядке выбора записей к удалению см. в секции Как работает запрос.
Ключевое слово WHERE condition
Задает условие выбора удаляемых записей. Значение может быть любым простым фильтром на основе некоторых или всех столбцов первичного ключа. Условия на другие столбцы не поддерживаются.
Если ключевое слово не указано, удаляются:
- для логической таблицы или материализованного представления:
- все текущие записи после указанного момента;
- все исторические записи после указанного момента;
- для снапшот-таблицы:
- все текущие записи;
- информация обо всех удаленных записях, которые были добавлены или обновлены после указанного момента.
Варианты ответа
В ответе возвращается:
- пустой объект ResultSet при успешном выполнении запроса;
- исключение при неуспешном выполнении запроса.
Ограничения
Ограничения выполнения
- Во время работы запроса не допускается выполнение BEGIN DELTA.
Ограничения сущностей
- Удаление записей недоступно, если таблица (в случае партиционированной таблицы — хотя бы одна ее партиция) имеет retention-правила для остужения данных.
- Запрос не обновляет материализованные представления, связанные с очищаемыми таблицами. Такие представления продолжают хранить данные, удаленные из таблиц.
Ограничения WHERE
- Условие
WHEREможет содержать только простой фильтр и не поддерживает подзапросы, соединения и другие операции. - Столбцы, указанные в условии
WHERE, должны входить в первичный ключ сущности.
Другие ограничения
- Удаление данных невозможно отменить.
Примеры
Удаление записей логической таблицы с указанием дельты
Удаление записей, в которых значение id входит в заданный список, из таблицы sales:
TRUNCATE ACTUAL marketing.sales FOR SYSTEM_TIME AS OF DELTA_NUM 6
WHERE id IN (111, 222, 333, 444)
Удаление записей снапшот-таблицы с указанием момента времени
Удаление записей с заданным значением product_code из таблицы sales_snapshot:
-- использование момента времени с точностью до секунд
TRUNCATE ACTUAL marketing.sales_snapshot FOR SYSTEM_TIME AS OF '2025-04-10 01:00:12'
WHERE product_code = 'ABC0123';
-- использование момента времени с точностью до миллисекунд
TRUNCATE ACTUAL marketing.sales_snapshot FOR SYSTEM_TIME AS OF '2025-04-10 01:00:12.273'
WHERE product_code = 'ABC0123';
Удаление записей материализованного представления
Удаление записей, в которых значение id больше 1001, из материализованного представления sales_and_stores:
TRUNCATE ACTUAL matview_db.sales_by_stores FOR SYSTEM_TIME AS OF '2022-04-23 15:15:14'
WHERE id > 1001
Удаление записей партиционированной таблицы
Удаление записей, в которых дата транзакции позже 10 января 2023, из партиционированной таблицы sales_partitioned:
TRUNCATE ACTUAL marketing.sales_partitioned FOR SYSTEM_TIME AS OF '2023-05-10 15:40:14'
WHERE transaction_date > '2023-01-10 00:00:00'
Удаление записей партиции
Удаление записей из партиции sales_jan_2023:
TRUNCATE ACTUAL marketing.sales_jan_2023 FOR SYSTEM_TIME AS OF '2023-05-10 15:28:52'