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

Можно ли удалить старые записи из таблицы 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

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

Более подробная информация о усечении таблицы.