Перейти к содержимому
Последнее обновление

Обзор операций удаления

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. Атомарная замена с помощью временных партиций: перезапись без прерывания запросов​

Если нужно перезаписать данные партиции, подход «сначала удалить, затем загрузить» создаёт промежуток времени, в течение которого данные недоступны для запросов. Атомарная замена с помощью временных партиций позволяет избежать этой проблемы.

Порядок действий:

  1. Создайте временную партицию, соответствующую целевой партиции
  2. Загрузите новые данные во временную партицию
  3. Атомарно замените исходную партицию с помощью операции замены

Подробнее см. в разделе Временная партиция. Если требуется атомарно заменить всю таблицу, см. раздел Атомарная замена таблицы.

Сравнение способов удаления​

СпособКлючевые слова синтаксисаГранулярность удаленияПроизводительностьПоддержка всех моделей таблиц
Оператор DELETEDELETE 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: Как обеспечить непрерывное выполнение запросов при перезаписи данных партиции?

Используйте атомарную замену с помощью временных партиций: сначала запишите новые данные во временную партицию, затем переключите партиции с помощью операции атомарной замены. Весь процесс прозрачен для запросов.