Возможно ли удалить старые записи из таблицы ClickHouse?
Если отвечать коротко, то да. В ClickHouse есть множество механизмов, которые позволяют освобождать место на диске, удаляя старые данные. Каждый механизм подходит для разных сценариев.
TTL
ClickHouse позволяет автоматически удалять данные при выполнении некоторых условий. Эти условия задаются как выражение, вычисляемое на основе значений любых столбцов, обычно это просто разница между текущим моментом времени и значением какого-то столбца, содержащего дату и время.
Ключевое преимущество такого подхода в том, что не нужно использовать внешнюю систему, чтобы запустить процесс — когда заданы условия TTL, удаление данных выполняется автоматически в фоновом режиме.
TTL можно использовать не только для перемещения в /dev/null, но еще и между дисками, например, с SSD на HDD.
Подробнее о конфигурировании TTL.
ALTER DELETE
ClickHouse не удаляет данные в реальном времени, как СУБД OLTP. Больше всего на такое удаление похожи мутации. Они выполняются с помощью запросов ALTER ... DELETE
или ALTER ... UPDATE
. В отличие от обычных запросов DELETE
и UPDATE
, мутации выполняются асинхронно, в пакетном режиме, не в реальном времени. В остальном после слов ALTER TABLE
синтаксис обычных запросов и мутаций одинаковый.
ALTER DELETE
можно использовать для гибкого удаления устаревших данных. Если вам нужно делать это регулярно, основной недостаток такого подхода будет заключаться в том, что потребуется внешняя система для запуска запроса. Кроме того, могут возникнуть некоторые проблемы с производительностью, поскольку мутации перезаписывают целые куски данных если в них содержится хотя бы одна строка, которую нужно удалить.
Это - самый распространенный подход к тому, чтобы обеспечить соблюдение принципов GDPR в вашей системе на ClickHouse.
Подробнее смотрите в разделе Мутации.
DROP PARTITION
Запрос ALTER TABLE ... DROP PARTITION
позволяет эффективно удалять целые партиции. Этот способ не такой гибкий, важно правильно сконфигурировать партиции при создании таблицы, но он подходит для достаточно широкого спектра типовых задач. Как и для мутаций, для регулярного запуска таких запросов нужна внешняя система.
Подробнее смотрите в разделе Манипулирование с партициями и кусками.
TRUNCATE
Это достаточно радикальный способ, он удаляет все данные в таблице, но хорошо подходит для отдельных случаевх.
Подробнее смотрите в разделе об удалении партиций.