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

Подскажите, плз, можно ли в селекте указать, какие партишены использовать

в запросе, не указывая их условие явно в WHERE?

Суть: есть таблица, в которой uuid является частью первичного ключа, и один uuid всегда соответствует одному дню данных. Мы всегда передаем в запросе where uuid in (x...), соответственно передавать еще и and date >= y and date <= z — избыточно с точки зрения выполнения запроса. Но сейчас это нужно, чтобы отбросить партишены, которые не содержат этот date. Соответственно вопрос в том, можно ли отбросить лишние партишены без того, чтобы происходила еще и дополнительная ненужная фильтрация самих строк?

12 ответов

25 просмотров

таблицу в которой uuid часть первичного ключа можно выкинуть слишком сильное кардиналити у ключа получается сделайте поля типа дата и низко кардинальные поля в PK и bloom_filter data skip index лучше для UUID

https://clickhouse.tech/docs/en/engines/table-engines/mergetree-family/mergetree/#table_engine-mergetree-data_skipping-indexes

можно через виртуальную колонку _part типа select _part, * from tablename where _part like '20200907%'; Но я не вижу чем это проще чем date>= and date<

перечитал, так понял partition для ретеншна данных, а в обращении по ключу вы не хотите чтоб работа была по всем партишнам. если не будете давать условии по partition key, будут читатся все, и это будет ужасно когда партиций много (например у нас более 15 тыс, запросы просто не работаеют когда в where не указаны ключи partition key) Либо менять партиционирование, либо давать в where

Ilia-Ablamonov Автор вопроса
【D】【J】
перечитал, так понял partition для ретеншна данных...

да, все так. вариант о котором еще думал — кодировать дату и версию выгрузки в одно поле (еще и компактнее можно, например 16+16 бит, таплом или упаковывать руками), и для выборки делать тот же where uid in (...), а партишены делать по первому элементу тапла или по битовому выражению, если руками. но еще не проверял, имеет ли это смысл и работает ли как хочется (но по идее должно).

Ilia Ablamonov
да, все так. вариант о котором еще думал — кодиро...

усложняете зачем то, тогда проще хранить дату и запрашивать по ней тоже как exact match Date IN (YYYYMMDD) and UUID IN (list)

Ilia-Ablamonov Автор вопроса
【D】【J】
усложняете зачем то, тогда проще хранить дату и за...

тогда две фильтрации вместо одной, нет? так как раз сейчас работает

Ilia Ablamonov
тогда две фильтрации вместо одной, нет? так как ра...

вас что именно тревожит в двух фильтрациях? какую проблему решить пытаетесь?

это делается указывая эти условия в where. Это именно так и работает. Нужные селекту партиции выбираются на самой первой стадии запроса, по метаданным партам в памяти

Ilia-Ablamonov Автор вопроса
Denny [Altinity]
это делается указывая эти условия в where. Это име...

Да это понятно, вопрос был в другом. Но в любом случае, переделаем чтобы не надо было хотеть странного.

Ilia Ablamonov
Да это понятно, вопрос был в другом. Но в любом сл...

а если вопрос про update / delete то все иначе конечно.

Ilia-Ablamonov Автор вопроса
Denny [Altinity]
а если вопрос про update / delete то все иначе кон...

В том, чтобы отбросить лишние партишены, но не делать лишнюю (не играющую роли с точки зрения бизнеслогики) фильтрацию на уровне строк.

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
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
Карта сайта