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