Возможно ли удалить старые записи из таблицы 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
Это довольно радикально — удалить все данные из таблицы, но в некоторых случаях это может быть именно то, что вам нужно.
Более подробно о усечении таблицы.