DELETE

Содержание раздела
  1. Синтаксис
    1. Ключевое слово RETRY
  2. Ограничения
    1. Ограничения выполнения
    2. Ограничения сущностей
    3. Ограничения ключевых слов
  3. Примеры
    1. Удаление записей логической таблицы
    2. Удаление записей standalone-таблицы
    3. Перезапуск операции по удалению записей

Запрос удаляет записи логической таблицы или standalone-таблицы согласно условию, указанному в блоке WHERE.

Удаляемые записи логической таблицы становятся архивными, но остаются доступными при чтении и выгрузке исторических данных. Записи standalone-таблицы удаляются насовсем и не могут быть восстановлены средствами системы.

Синтаксис удаления из standalone-таблицы подразумевает использование внешней writable-таблицы, которая указывает на нужную standalone-таблицу.

Удаление данных из логических и материализованных представлений недоступно.

Удаление записей логической таблицы доступно из ADB, ADQM и ADP, удаление записей standalone-таблицы — из ADB и ADP.

Для обновления большого объема данных следует использовать загрузку данных.

Запрос обрабатывается в порядке, описанном в разделе Порядок обработки запросов на обновление данных.

В ответе возвращается:

  • пустой объект ResultSet при успешном выполнении запроса;
  • исключение при неуспешном выполнении запроса.

Незавершенную операцию по удалению данных можно перезапустить, повторив исходный запрос с ключевым словом RETRY. Подробнее обо всех способах обработки незавершенных операций см. в разделе Управление операциями записи.

Запрос DELETE не удаляет историю изменений данных в логической таблице.
Чтобы удалить часть данных с историей изменений или только историю изменений, выполните запрос TRUNCATE HISTORY, чтобы удалить все данные таблицы вместе с историей изменений — запрос DROP TABLE. Обратите внимание, что данные, удаленные запросами TRUNCATE HISTORY и DROP TABLE, невозможно восстановить средствами системы.

Синтаксис

Удаление записей:

DELETE FROM [db_name.]table_name [WHERE filter_expression]

Перезапуск операции по удалению записей:

RETRY DELETE FROM [db_name.]table_name [WHERE filter_expression]

Параметры:

db_name

Имя логической базы данных. Опционально, если выбрана логическая БД, используемая по умолчанию.

table_name

Имя таблицы, из которой удаляются записи. Возможные значения:

  • имя логической таблицы,
  • имя внешней writable-таблицы, указывающей на нужную standalone-таблицу.
filter_expression

Условие выбора удаляемых записей. Может содержать сравнение с константами, подзапросы и JOIN-соединения.
Если условие не указано, удаляются все актуальные данные таблицы или все данные standalone-таблицы (в зависимости от вида таблицы).

Ключевое слово RETRY

Ключевое слово перезапускает обработку незавершенной операции записи, созданной запросом DELETE. Пример запроса см. ниже. Список незавершенных операций можно получить с помощью запроса GET_WRITE_OPERATIONS.

Если ключевое слово не указано, система создает новую операцию и обрабатывает ее.

Ключевое слово RETRY недоступно в запросах к standalone-таблицам.

Ограничения

Ограничения выполнения

  • Не допускается параллельное выполнение идентичных запросов.

Ограничения сущностей

  • Удаление записей из логических таблиц возможно только при наличии открытой дельты (см. BEGIN DELTA).
  • Удаление записей логических таблиц из ADG недоступно.
  • Удаление записей standalone-таблиц из ADG и ADQM недоступно.
  • Удаление записей из логических и материализованных представлений недоступно.

Ограничения ключевых слов

  • В условии WHERE не допускается использование функций, которые приводят к разным результатам в разных СУБД хранилища. Примеры таких функций — это операции над числами с плавающей запятой: сравнение с ними, округление и т.д.
  • Ключевое слово RETRY недоступно в запросах к standalone-таблицам.

Примеры

Удаление записей логической таблицы

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

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

-- удаление записей по условию с константой
DELETE FROM sales WHERE store_id = 234;

-- удаление записей по условию с подзапросом
DELETE FROM sales WHERE store_id IN (SELECT id FROM stores WHERE region = 'Калуга' OR region = 'Нижний Новгород');

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

Удаление записей standalone-таблицы

-- удаление записей standalone-таблицы, на которую указывает внешняя writable-таблица agreements_ext_write_adp
DELETE FROM marketing.agreements_ext_write_adp WHERE client_id < 100;

Перезапуск операции по удалению записей

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

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

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

-- перезапуск обработки операции по удалению записей
RETRY DELETE FROM sales WHERE store_id = 123;

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