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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Обрезка таблицы

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

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

Удаление раздела

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

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

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