не критично.
перейду к классике - партиционирование )))
Читаю документацию
[https://clickhouse.com/docs/en/engines/table-engines/mergetree-family/custom-partitioning-key/](https://clickhouse.com/docs/en/engines/table-engines/mergetree-family/custom-partitioning-key/)
не совсем понимаю
**WARNING**
In most cases you do not need a partition key, and in most other cases you do not need a partition key more granular than by months. Partitioning does not speed up queries (in contrast to the ORDER BY expression).
1) Почему не стоит указывать ключ партиционирования? Если я не укажу, то CH сам будет стремиться иметь какое-то разумное количество партиций?
2) Есть ли разница в производительности - указывать ключ или нет? Мое преположение - нет, по-идее у сервера в памяти есть информация о всем партах и minmax значениях колонок, если в предикате есть информация, достаточная для исключения каких-то партов из скана - это будет сделано, независимо от наличия ключа партиционирования. Поправьте, если не прав.
3) Когда и зачем все же стоит указать ключ?
Мои данные - одна большая таблица на где-то 20TB c timeseries данными, т.е. есть колонка timestamp. Изначально хотел партиционировать по toYYYYMM(timestamp), но оказалось, что у некоторых датчиков сбиты часы и они присылали данные в диапазоне 1970 - 2200 годы. т.к. 99.x% данных разложены аккуратно по 10и годам, а менее процента - случайным образом. Уже на стадии заливки из csv начало жаловаться на too many partitions, в итоге количество партов быстро выросло до 270k и все. Вот и думаю - а нужно мне вообще партиционировать или нет.
партиция это логическое разбиение не физическое ну на физическом плане там еще minmax индекс в памяти чтобы быстро парты откинуть то есть если нет данных, то нет и партиции ключ партицирования не нужен если у вас нет надобности в partition prunning (быстрое отбрасывание партов до момента скана primary key) для timeseries вполне логично иметь месячные партиции ... 20 терабайт несжатых данных могут превратиться всего в 200 гигабайт сжатых..
у сервера по умолчанию вроде нет информации обо всех minmax всех колонок во всех партах можно их добавить на отдельные колонки через: 1. partition key -> тогда движок будет использовать minmax партиции, чтобы при запросах быстро отбрасывать лишние 2. minmax skipping index -> тут надо смотреть, чтобы у вас для большинства гранул не получился один и тот же minmax, а то при запросах скипнуть движок особо ничего не сможет
Обсуждают сегодня