Партиции в Clickhouse, нюансы нейминга
Использование обращений напрямую к партициям позволяет выполнять действия с данными с использованием меньшего количества ресурсов. Пользуюсь этим на проекте с Clickhouse, если нужно удалить большой кусок данных. На неделе столкнулся с ошибкой при работе с партициями по дате и, после поиска причины проблемы, был неприятно удивлен одновременной гибкости и строгости Clickhouse. Вроде бы доке все описано довольно подробно: PARTITION… Но!
Но, от меня укрылась одна особенность, которой хочу поделиться. В общем случае, как оказалось, ключ партиции (системная колонка _partition_id из рассматриваемой таблички) может не совпадать с наименованием партиции (partition из system.parts). При этом, наименование партиции может быть как строкой, так и числом, так и кортежем (tuple).
При этом в различных операциях с партициями поддерживаются различные варианты указания партиции (см. доку выше), но вот в операции ALTER TABLE DELETE IN PARTITION ожидается представление из system.parts. При этом, в зависимости от типа данных там может быть как число, так и строка. Просто рай для автоматизации!
Для себя выбрал решение брать значение из системной колонки _partition_value, приведенное к строке через toString. Пока каких-то проблем не поймали.
P.S. Что была за проблема? Я брал название партиции из системной колонки _partition_id. Во всех интеграциях операция отрабатывала нормально кроме одной. При этом никаких сообщений об ошибках не было. Данные просто не удалялись, так как партиции с именем _partition_id не существовало. Вот так по тихому, без ошибок, плодились задвоения данных.
Post #187
294