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

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

Существует несколько способов удаления данных в 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.

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