184 похожих чатов

Ладно, пока отложу вопрос с zookeeper и high availability, вроде

не критично.
перейду к классике - партиционирование )))

Читаю документацию

[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 и все. Вот и думаю - а нужно мне вообще партиционировать или нет.

2 ответов

8 просмотров

партиция это логическое разбиение не физическое ну на физическом плане там еще minmax индекс в памяти чтобы быстро парты откинуть то есть если нет данных, то нет и партиции ключ партицирования не нужен если у вас нет надобности в partition prunning (быстрое отбрасывание партов до момента скана primary key) для timeseries вполне логично иметь месячные партиции ... 20 терабайт несжатых данных могут превратиться всего в 200 гигабайт сжатых..

у сервера по умолчанию вроде нет информации обо всех minmax всех колонок во всех партах можно их добавить на отдельные колонки через: 1. partition key -> тогда движок будет использовать minmax партиции, чтобы при запросах быстро отбрасывать лишние 2. minmax skipping index -> тут надо смотреть, чтобы у вас для большинства гранул не получился один и тот же minmax, а то при запросах скипнуть движок особо ничего не сможет

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта