DELETE
Содержание раздела
Запрос позволяет удалить актуальные записи логической таблицы. Записи выбираются по условию, указанному в блоке запроса WHERE
. Записи становятся архивными и при этом остаются доступными для чтения и выгрузки. Запрос обрабатывается в порядке, описанном в разделе Порядок обработки запросов на обновление данных.
Удаление записей возможно только из логической таблицы. Удаление записей из логических и материализованных представлений недоступно.
Запрос не поддерживается для ADG.
Для обновления большого объема данных следует использовать загрузку данных.
В ответе возвращается:
- пустой объект ResultSet при успешном выполнении запроса;
- исключение при неуспешном выполнении запроса.
Если операция записи, запущенная запросом DELETE
, зависла, горячую дельту невозможно закрыть или откатить. В этом случае нужно повторить запрос. Действие перезапустит обработку операции, и после ее завершения можно будет закрыть или откатить дельту. Список незавершенных (в том числе — зависших) операций можно посмотреть можно с помощью запроса GET_WRITE_OPERATIONS.
Чтобы удалить записи вместе с историей изменений или только историю изменений, используйте запрос TRUNCATE HISTORY. Удалить все записи таблицы с историей можно, удалив логическую таблицу из всех СУБД хранилища. Обратите внимание, что удаленные таким образом данные невозможно восстановить средствами системы.
Синтаксис
DELETE FROM [db_name.]table_name [WHERE filter_expression]
Параметры:
db_name
— имя логической базы данных. Опционально, если выбрана логическая БД, используемая по умолчанию;table_name
— имя логической таблицы, записи которой удаляются;filter_expression
— условие выбора удаляемых записей. Если ключевое слово WHERE с условием не указано, удаляются все актуальные данные таблицы.
Ограничения
- Выполнение запроса возможно только при наличии открытой дельты (см. BEGIN DELTA).
- Столбцы в условии запроса не могут иметь имена, зарезервированные для служебного использования:
sys_op
,sys_from
,sys_to
,sys_close_date
,bucket_id
,sign
. - В условии
WHERE
не допускается использование функций, результаты которых различаются в разных СУБД хранилища. Примерами таких функций служат операции с вещественными числами (числами с плавающей запятой): сравнение с вещественным числом, округление и т.д. - Не допускается выполнение идентичных параллельных запросов.
Пример
-- выбор логической базы данных marketing в качестве базы данных по умолчанию
USE marketing;
-- открытие новой (горячей) дельты
BEGIN DELTA;
-- удаление записей логической таблицы sales о покупках в магазине, который был закрыт
DELETE FROM sales WHERE store_id = 234;
-- закрытие дельты (фиксация изменений)
COMMIT DELTA;