Обзор операций удаления
Apache Doris предоставляет несколько способов удаления данных для типичных сценариев: удаление по условию, удаление на уровне партиции, полная очистка таблицы, пакетное удаление по первичным ключам и атомарная перезапись. Эта статья поможет вам быстро выбрать наиболее подходящий способ удаления в зависимости от вашей задачи.
Быстрая навигация
Выберите способ удаления в зависимости от вашего сценария:
| Сценарий | Рекомендуемый способ | Применимые модели | Особенности |
|---|---|---|---|
| Удалить часть данных по условию | Оператор DELETE | Все модели таблиц | Универсальность и гибкость |
| Удалить устаревшие партиции (например, оставить данные за последние 7 дней) | Удаление партиций (TRUNCATE) | Партиционированные таблицы | Изменяет только метаданные, максимальная эффективность |
| Очистить всю таблицу, сохранив её схему | Удаление всех данных из таблицы (TRUNCATE) | Все модели таблиц | Быстрая очистка данных |
| Массово удалить данные по большому количеству первичных ключей (синхронизация CDC и т. п.) | Delete Sign | Модель Unique Key | Массовое удаление через обновления |
| Перезаписать данные партиции без прерывания запросов | Атомарная замена с помощью временных партиций | Партиционированные таблицы | Атомарная перезапись без периодов недоступности данных для запросов |
Подробное описание способов удаления
1. Оператор DELETE: удаление по условию
Подходит для распространённого сценария удаления части данных по условию и поддерживает все модели таблиц.
Синтаксис:
DELETE FROM table_name WHERE condition;
Особенности применения:
- Подходит для большинства повседневных задач удаления
- Менее эффективен, чем описанные ниже способы, при массовом удалении или удалении всех данных партиции
Подробнее см. в разделе Операция удаления.
2. Удаление партиций: эффективная очистка устаревших данных
В Doris часто используют партиционирование по дате для управления данными. Если нужно хранить данные только за недавний период (например, за последние 7 дней), рекомендуется удалять данные на уровне партиций (truncate partition).
Синтаксис:
TRUNCATE TABLE tbl PARTITION(p1, p2);
Преимущества:
- Изменяет только метаданные партиции, сканирование данных не требуется
- Рекомендуемый способ очистки устаревших партиций
Подробнее см. в разделе Операция TRUNCATE.
3. Удаление всех данных из таблицы: быстрая очистка таблицы
Подходит для сценариев, в которых нужно быстро очистить всю таблицу, сохранив её схему, например при повторной подготовке данных для офлайн-анализа.
Синтаксис:
TRUNCATE TABLE table_name;
Подробнее см. в разделе Операция TRUNCATE.
4. Delete Sign: массовое удаление по первичным ключам
Удаление данных можно рассматривать как особую форму обновления. В модели с первичным ключом, поддерживающей обновления (Unique Key), можно использовать маркер удаления Delete Sign, чтобы удалять данные путём записи обновлений.
Типичные сценарии:
- Синхронизация данных CDC (Change Data Capture): пометьте запись binlog об операции DELETE маркером Delete Sign и запишите её в Doris, чтобы удалить данные с соответствующим первичным ключом.
Преимущества и ограничения:
- Поддерживает массовое удаление по первичным ключам и работает эффективнее оператора DELETE
- Относится к расширенным возможностям и сравнительно сложен в использовании
Подробнее см. в разделе Пакетное удаление.
5. Атомарная замена с помощью временных партиций: перезапись без прерывания запросов
Если нужно перезаписать данные партиции, подход «сначала удалить, затем загрузить» создаёт промежуток времени, в течение которого данные недоступны для запросов. Атомарная замена с помощью временных партиций позволяет избежать этой проблемы.
Порядок действий:
- Создайте временную партицию, соответствующую целевой партиции
- Загрузите новые данные во временную партицию
- Атомарно замените исходную партицию с помощью операции замены
Подробнее см. в разделе Временная партиция. Если требуется атомарно заменить всю таблицу, см. раздел Атомарная замена таблицы.
Сравнение способов удаления
| Способ | Ключевые слова синтаксиса | Гранулярность удаления | Производительность | Поддержка всех моделей таблиц |
|---|---|---|---|---|
| Оператор DELETE | DELETE FROM | По условию | Средняя | Да |
| Удаление партиций | TRUNCATE PARTITION | Вся партиция | Высокая (только метаданные) | Только партиционированные таблицы |
| Удаление всех данных из таблицы | TRUNCATE TABLE | Вся таблица | Высокая | Да |
| Delete Sign | Запись __DORIS_DELETE_SIGN__ | По первичному ключу | Высокая (при массовом удалении) | Только модель Unique Key |
| Атомарная замена с помощью временной партиции | REPLACE PARTITION | Вся партиция | Высокая | Только партиционированные таблицы |
Что следует учитывать
- Влияние на количество версий: операции удаления создают новые версии данных. Частое удаление может увеличить количество версий и тем самым повлиять на производительность запросов.
- Задержка освобождения места: удалённые данные продолжают занимать место в хранилище до завершения Compaction. Сама операция удаления не уменьшает объём занятого места немедленно.
- Ограничения моделей таблиц: Delete Sign применим только к модели с первичным ключом Unique Key. Удаление на уровне партиций применимо только к партиционированным таблицам.
Часто задаваемые вопросы (FAQ)
Вопрос 1: Чем оператор DELETE отличается от TRUNCATE?
Оператор DELETE удаляет данные по условию WHERE и может использоваться для любой таблицы. TRUNCATE напрямую удаляет все данные таблицы или партиции, изменяя только метаданные. Это быстрее, но гранулярность удаления при этом крупнее.
Вопрос 2: Почему место в хранилище не освобождается сразу после удаления?
После операции удаления данные фактически удаляются из хранилища только по завершении фонового слияния Compaction. Это нормальное поведение.
Вопрос 3: Как эффективно обрабатывать события DELETE при синхронизации CDC?
Рекомендуется использовать модель с первичным ключом Unique Key в сочетании с Delete Sign. Этот подход позволяет массово удалять данные по большому количеству первичных ключей и значительно эффективнее последовательного выполнения отдельных операторов DELETE.
Вопрос 4: Как обеспечить непрерывное выполнение запросов при перезаписи данных партиции?
Используйте атомарную замену с помощью временных партиций: сначала запишите новые данные во временную партицию, затем переключите партиции с помощью операции атомарной замены. Весь процесс прозрачен для запросов.