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

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

Существует несколько способов удалить данные в ClickHouse, каждый из которых имеет свои преимущества и характеристики производительности. Выберите подходящий метод в зависимости от вашей модели данных и объема данных, который вы планируете удалить.

МетодСинтаксисКогда использовать
Легковесное удалениеDELETE FROM [table]Используйте, когда нужно удалить небольшое количество данных. Строки сразу фильтруются из всех последующих запросов SELECT, но первоначально только помечаются как удаленные, а не удаляются с диска.
Мутация удаленияALTER TABLE [table] DELETEИспользуйте, когда данные должны быть немедленно удалены с диска (например, для соблюдения требований). Негативно сказывается на производительности SELECT.
Ограничение таблицыTRUNCATE TABLE [db.table]Эффективно удаляет все данные из таблицы.
Удаление партицииDROP PARTITIONЭффективно удаляет все данные из партиции.

Вот краткое резюме различных способов удаления данных в ClickHouse:

Легковесные удаления

Легковесные удаления сразу помечают строки как удаленные, что позволяет автоматически исключать их из всех последующих запросов SELECT. Последующее удаление этих удаленных строк происходит во время естественных циклов слияния и, таким образом, требует меньше I/O. В результате может случиться так, что в течение неуточненного периода данные фактически не удаляются из хранения и только помечены как удаленные. Если вам необходимо гарантировать, что данные удалены, рассмотрите команду мутации выше.

Удаление больших объемов данных с помощью легковесного оператора DELETE также может негативно повлиять на производительность запросов SELECT. Команда также несовместима с таблицами с проекциями.

Обратите внимание, что в операции используется мутация для пометки удаленных строк (добавление колонки _row_exists), тем самым требуя некоторого I/O.

В общем, легковесные удаления должны быть предпочтительнее по сравнению с мутациями, если можно терпеть наличие удаленных данных на диске (например, в случаях, не требующих соблюдения). Этот подход все же следует избегать, если все данные должны быть удалены.

Читать дальше о легковесных удалениях.

Мутации удаления

Мутации удаления могут быть выполнены через команду ALTER TABLE ... DELETE, например

Эти операции могут выполняться либо синхронно (по умолчанию, если они не реплицированы), либо асинхронно (определяется настройкой mutations_sync). Эти операции требуют значительных ресурсов I/O, переписывая все части, которые соответствуют выражению WHERE. Этот процесс не имеет атомарности - части заменяются мутированными частями, как только они готовы, и запрос SELECT, который начинает выполняться во время мутации, будет видеть данные из частей, которые уже были мутированы, наряду с данными из частей, которые еще не были мутированы. Пользователи могут отслеживать состояние прогресса через таблицу systems.mutations. Эти операции интенсивны по I/O и должны использоваться экономно, так как могут повлиять на производительность запросов SELECT кластера.

Читать дальше о мутациях удаления.

Ограничение таблицы

Если все данные в таблице необходимо удалить, используйте команду TRUNCATE TABLE, приведенную ниже. Это легковесная операция.

Читать дальше о TRUNCATE TABLE.

Удаление партиции

Если вы указали пользовательский ключ партиционирования для ваших данных, партиции можно эффективно удалить. Избегайте партиционирования с высокой кардинальностью.

Читать дальше о DROP PARTITION.

Дополнительные ресурсы