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

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

Существует несколько способов удаления данных в 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). Эти операции чрезвычайно ресурсоемки, перерабатывая все части, которые соответствуют выражению WHERE. В этом процессе отсутствует атомарность - части заменяются на измененные части, как только они готовы, и запрос SELECT, который начинает выполняться во время мутации, увидит данные из частей, которые уже были изменены, наряду с данными из частей, которые еще не были изменены. Пользователи могут отслеживать состояние прогресса через таблицу systems.mutations. Эти операции требуют интенсивных I/O и должны использоваться экономно, так как они могут повлиять на производительность SELECT кластера.

Подробнее о удалениях с помощью мутаций.

Очистка таблицы

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

Подробнее о TRUNCATE TABLE.

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

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

Подробнее о DROP PARTITION.

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