Skip to main content

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

Это достаточно радикальный способ, он удаляет все данные в таблице, но хорошо подходит для отдельных случаевх.

Подробнее смотрите в разделе об удалении партиций.