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

Всем привет. Есть таблица с партиционированием по toYYYYMMDD(ts), где ts имеет

тип Date.

И есть два варианта условия в запросе:
1. where ts = today()
2. where toYYYYMMDD(ts) = toYYYYMMDD(today())

Скажите, пожалуйста, КХ в обоих случаях будет работать только с одной партицией или только во втором?

7 ответов

8 просмотров

``` SELECT toTypeName(toYYYYMMDD(now()), toTypeName(today()) ``` первое поле UInt32 второе Date в пермом случае у вас будет фуллскан во втором случае нормально отберутся партиции toUInt32(today()) тоже нормально сработает

Alexey-Sokolov Автор вопроса
Slach [altinity]
``` SELECT toTypeName(toYYYYMMDD(now()), toTypeNam...

Спасибо. Прочитал здесь, что КХ умеет отбрасывать ненужные партиции и добавил везде проверки, но, как выяснилось, неправильные))

Alexey Sokolov
Спасибо. Прочитал здесь, что КХ умеет отбрасывать...

извините фигню написал toUInt32(today()) у вас как раз и происходит ну вообще то что toYYYYMMDD возвращает UInt32 и что это YYYYMMDD в виде числа это надо по доке понять =) вообще у clickhouse с преобразованием типа беда хорошо если исключение кидается но в вашем случае просто молча глотает и делает преобразование в UInt32 но число получается ДРУГОЕ и делает фуллскан потому что не может определить быстро партицию SELECT toUInt32(today()), toYYYYMMDD(today()); два разных числа получаются

Slach [altinity]
извините фигню написал toUInt32(today()) у вас как...

но при этом результат выборки корректный в обоих случаях, это влияет только на использование/не использование партиций

Alexey-Sokolov Автор вопроса
Slach [altinity]
извините фигню написал toUInt32(today()) у вас как...

Что типы разные - это я понял, а вот что по умолчанию делается toUInt32() вместо toYYYYMMDD() - этого и не учёл, верил в магию))

Alexey-Sokolov Автор вопроса
Aleksey Barabanov
но при этом результат выборки корректный в обоих с...

Именно. В моём случае это лишние несколько часов времени)

Alexey-Sokolov Автор вопроса
Slach [altinity]
извините фигню написал toUInt32(today()) у вас как...

Дополню - судя по всему, если ключ партиционирования содержится в ключе сортировки, то хватает и обычного ts = todate(), но если ключ партиционирования там отсутствует, то надо делать toYYYYMMDD(ts) = toYYYYMMDD(today()). Отсюда следует, что даже если партиционирование идёт по toYYYYMMDD от поля типа Date (т.е. в одной партиции всегда один день), то всё равно есть смысл добавлять это поле в ключ сортировки.

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

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

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