DELETE

Содержание раздела
  1. Синтаксис
  2. Ограничения
  3. Пример

Запрос позволяет удалить актуальные записи логической таблицы. Записи выбираются по условию, указанному в блоке запроса 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 не допускается использование функций, результаты которых различаются в разных СУБД хранилища. Примерами таких функций служат операции с вещественными числами (числами с плавающей запятой): сравнение с вещественным числом, округление и т.д.
  • Не допускается выполнение идентичных параллельных запросов.

Пример

-- выбор логической базы данных sales в качестве базы данных по умолчанию
USE sales;

-- открытие новой (горячей) дельты
BEGIN DELTA;

-- удаление записей логической таблицы sales о покупках в магазине, который был закрыт
DELETE FROM sales WHERE store_id = 234;

-- закрытие дельты (фиксация изменений)
COMMIT DELTA;