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

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

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

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

12 ответов

11 просмотров

таблицу в которой 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 то все иначе кон...

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

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

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

Типа вызывать GetParent и проверять на соответствие GetModuleHandle?
The Bird of Hermes
67
Do any of you guys have interesting projects one could join? I'm a Middle Full-Stack developer (JS/TS, React & Node)
Lev Shapiro
40
$res = json_decode($наша строка из респонса); $res1 = array_map(fn($o) => $o->name, $res->breadcrumbs[0]->entities); Как такое будет на Хаскеле?.. В начале весь джейсон, в ко...
Хаскель Моисеевич Гопник
27
В чем сила брат, в NASM или FASM?
Isaac Kleiner
18
Вопрос по диагностике ошибок (я знаю в чем, в данном конкретном примере, я знаю, как исправить, пример модельный, понятно, что в реальности бывает намного запутаннее). module...
ⰄⰎⰋⰐⰐⰑⰛⰤⰧⰧⰩⰄ ⰊⰑⰁⰓⰡⰛⰦⰕⰫ
11
А чем вам питонисты не угодили?😂
.
79
Есть какой-нибудь для Delphi/FPC T*Compression(Decompression)Stream на базе LZ4/Zstd/любой другой быстрый(и хорошо сжимающий) алгоритм А ещё лучше в pure pascal А ещё лучше од...
notme
52
Хтось використовував Vapor на Windows?
Jaroshevskii
15
Какое виндузовое сообщение приходит TTabSheet, что риэлайняться контролы на нем, даже у которых парент другой? Ситуация: открываю форму - кнопок нет, перелистываю на другой т...
Катерина Свиридова
7
Тут кста кто-нибудь NeoVim использует?
Simple Sorcerer
13
Карта сайта