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