DELETE
Содержание раздела
Поддерживается в версиях: 6.2 / 6.1.1 / 6.0 / 5.8 / 5.7 / 5.6.1 / 5.5 / 5.4 / 5.3 / 5.2.
Запрос удаляет записи логической таблицы или standalone-таблицы согласно условию, указанному в блоке WHERE
. Удаление данных из логических и материализованных представлений недоступно.
Синтаксис удаления из standalone-таблицы подразумевает использование внешней writable-таблицы, которая указывает на нужную standalone-таблицу.
Удаление записей логической таблицы возможно из любых СУБД, удаление записей standalone-таблицы — из СУБД ADB и ADP.
Чтобы удалить большой объем данных, используйте загрузку данных.
Запрос обрабатывается в порядке, описанном в разделе Порядок обработки запросов на обновление данных.
В ответе возвращается:
- объект ResultSet c одной записью, содержащей номер операции записи, при успешном выполнении запроса;
- исключение при неуспешном выполнении запроса.
При успешном выполнении запроса для записей логической таблицы, соответствующих условию, на физическом уровне проставляется номер текущей версии как последней, в которой эти записи действовали. Записи standalone-таблицы удаляются насовсем и не могут быть восстановлены средствами системы.
Запрос не удаляет историю изменений данных.
Способы удаления истории изменений см. в разделе Управление историей изменений данных
Если в условии указан SELECT-подзапрос, он должен быть доступен для исполнения во всех датасорсах, где размещены удаляемые данные таблицы.
Например, можно удалить данные таблицы, размещенные в датасорсах adb
и adqm2
, если подзапрос доступен в датасорсах adb
, adqm2
и adp
, но невозможно удалить данные той же таблицы, если подзапрос доступен только в adb
.
Незавершенную операцию по удалению данных можно перезапустить, повторив исходный запрос с ключевым словом RETRY. Подробнее о способах обработки незавершенных операций см. в разделе Управление операциями записи.
По умолчанию система ведет статистику обработки запросов к данным. Запросы DELETE
учитываются в категории WRITE
. Чтобы получить статистику, выполните GET_ENTITY_STATISTICS.
Синтаксис
Удаление записей:
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-соединения.
Ключевое слово WHERE
Ключевое слово WHERE
задает условие выбора удаляемых записей. Если ключевое слово не указано, удаляются все записи таблицы. См. также параметр filter_expression.
Ключевое слово RETRY
Ключевое слово перезапускает обработку незавершенной операции записи, созданной запросом DELETE
. Если ключевое слово не указано, система создает новую операцию и обрабатывает ее.
Пример запроса с ключевым словом RETRY
см. ниже. Список незавершенных операций можно получить с помощью запроса GET_WRITE_OPERATIONS.
Перезапуск с ключевым словом RETRY
доступен только для операций со статусом «Выполняется». Чтобы перезапустить операцию со статусом «Отменяется», выполните RESUME_WRITE_OPERATION. Подробнее о способах перезапуска и отмены операций см. в разделе Управление операциями записи.
Ключевое слово RETRY
недоступно в запросах к standalone-таблицам.
Ограничения
Ограничения выполнения
- Выполнение запроса недоступно, если есть незавершенная операция по изменению схемы.
- Не допускается параллельное выполнение идентичных запросов.
Ограничения сущностей
- Запрос доступен только для логических таблиц и standalone-таблиц.
- Удаление записей из standalone-таблиц доступно для СУБД ADB и ADP.
Ограничения ключевых слов
- В условии
WHERE
не допускается использование функций, которые приводят к разным результатам в разных СУБД. Примеры таких функций — это операции над числами с плавающей запятой: сравнение с ними, округление и т.д. - Ключевое слово
RETRY
недоступно в запросах к standalone-таблицам.
Другие ограничения
- Запрос не удаляет данные без метки времени, а также данные с меткой времени, превышающей текущее время сервера.
- SELECT-подзапрос, если он указан в условии, должен быть доступен для исполнения во всех датасорсах, где размещены удаляемые данные таблицы.
Примеры
Удаление записей логической таблицы в дельте
-- выбор логической базы данных 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;
Удаление записей логической таблицы вне дельты
-- удаление записей по условию с константой вне дельты
DELETE FROM marketing.sales WHERE store_id < 123;
Удаление записей standalone-таблицы
-- удаление записей standalone-таблицы, на которую указывает внешняя writable-таблица agreements_ext_write_adp
DELETE FROM marketing.agreements_ext_write_adp WHERE client_id < 150;
Перезапуск операции по удалению записей
-- выбор логической базы данных marketing в качестве базы данных по умолчанию
USE marketing;
-- открытие новой (горячей) дельты
BEGIN DELTA;
-- удаление записей логической таблицы sales о покупках в магазине
DELETE FROM sales WHERE store_id = 123;
-- перезапуск обработки операции по удалению записей
RETRY DELETE FROM sales WHERE store_id = 123;
-- закрытие дельты
COMMIT DELTA;