DELETE
Содержание раздела
Запрос удаляет записи логической таблицы или 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;