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

Можно ли удалить старые записи из таблицы ClickHouse?

Краткий ответ — “да”. ClickHouse предлагает несколько механизмов, позволяющих освободить дисковое пространство, удаляя старые данные. Каждый механизм предназначен для разных сценариев.

TTL

ClickHouse позволяет автоматически удалять значения, когда происходит какое-то условие. Это условие настраивается как выражение на основе любых колонок, обычно это просто статический смещение для любой колонки с меткой времени.

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

примечание

TTL также может быть использован для перемещения данных не только в /dev/null, но и между различными системами хранения, например, с SSD на HDD.

Подробнее о настройке TTL.

DELETE FROM

DELETE FROM позволяет выполнять стандартные запросы DELETE в ClickHouse. Строки, указанные в условии фильтра, помечаются как удаленные и убираются из будущих наборов результатов. Очистка строк происходит асинхронно.

примечание

DELETE FROM доступен начиная с версии 23.3 и новее. В более старых версиях он является экспериментальным и должен быть включен с помощью:

ALTER DELETE

ALTER DELETE удаляет строки с использованием асинхронных пакетных операций. В отличие от DELETE FROM, запросы, выполненные после ALTER DELETE и до завершения пакетных операций, будут включать строки, предназначенные для удаления. Для получения более подробной информации смотрите документацию по ALTER DELETE.

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

Это самый распространенный подход для приведения вашей системы на основе ClickHouse в соответствие с GDPR.

Подробнее о мутациях.

DROP PARTITION

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

Подробнее о управлении партициями.

TRUNCATE

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

Подробнее о усечении таблицы.