Size: a a a

ClickHouse не тормозит

2020 August 01

Р

Роман in ClickHouse не тормозит
lnuynxa
Скорее всего в середину осени думаю.
Это уже ближе к ответу, спасибо
источник

Д

Дмитрий in ClickHouse не тормозит
Подскажите, если я храню данные за последние 60 дней, PARTITION BY toYYYYMM(date) для меня будет не очень оптимальным, я прав, ведь всего будет две партиции? Вопрос таков: можно ли сделать toDayOfYear(date)? Будет ли ClickHouse понимать нужные партиции при выборке ... WHERE date > '2020-07-15? И если такой ключ для партиционирования не очень оптимален, то какой лучше взять?
источник

l

lnuynxa in ClickHouse не тормозит
Дмитрий
Подскажите, если я храню данные за последние 60 дней, PARTITION BY toYYYYMM(date) для меня будет не очень оптимальным, я прав, ведь всего будет две партиции? Вопрос таков: можно ли сделать toDayOfYear(date)? Будет ли ClickHouse понимать нужные партиции при выборке ... WHERE date > '2020-07-15? И если такой ключ для партиционирования не очень оптимален, то какой лучше взять?
можно сделать просто PARTITION BY date
на самом деле там чуть хитрее и кликхаус хранит минимальные и максимальные значения столбца учавствующего в ключе партицирования, так что все будет ок
источник

Д

Дмитрий in ClickHouse не тормозит
lnuynxa
можно сделать просто PARTITION BY date
на самом деле там чуть хитрее и кликхаус хранит минимальные и максимальные значения столбца учавствующего в ключе партицирования, так что все будет ок
Спасибо. У меня вообще несколько вопросов накопилось. Правильно ли я понимаю, что если ключ партиционирования по дате, то в ORDER BY первым значением эту дату тоже полезно положить, особенно если в выборках эта дата почти всегда фигурирует? Правильно ли я понимаю исходя из этой иллюстрации, что порядок внутри ORDER BY имеет значение, верно? Где можно почитать про правильный выбор полей, которые нужно ложить в ORDER BY?
источник

Д

Дмитрий in ClickHouse не тормозит
Допустим запрос WHERE date > '2020-07-05' AND user_id = 100, при PARTITION BY date ORDER BY (date, user_id) будет выполнятся максимально эффективно. А что делать с таким запросом: WHERE date > '2020-07-05' AND event_id = 200?
источник

l

lnuynxa in ClickHouse не тормозит
Дмитрий
Спасибо. У меня вообще несколько вопросов накопилось. Правильно ли я понимаю, что если ключ партиционирования по дате, то в ORDER BY первым значением эту дату тоже полезно положить, особенно если в выборках эта дата почти всегда фигурирует? Правильно ли я понимаю исходя из этой иллюстрации, что порядок внутри ORDER BY имеет значение, верно? Где можно почитать про правильный выбор полей, которые нужно ложить в ORDER BY?
> Правильно ли я понимаю, что если ключ партиционирования по дате, то в ORDER BY первым значением эту дату тоже полезно положить,
если у вас партиционирование по дате, класть ее в ORDER BY нет никакого смысла.
> порядок внутри ORDER BY имеет значение, верно?
Да.
> Где можно почитать про правильный выбор полей, которые нужно ложить в ORDER BY?
Основное правило в начало идут низко кардинальные поля, по которым часто идет фильтрация
источник

Д

Дмитрий in ClickHouse не тормозит
lnuynxa
> Правильно ли я понимаю, что если ключ партиционирования по дате, то в ORDER BY первым значением эту дату тоже полезно положить,
если у вас партиционирование по дате, класть ее в ORDER BY нет никакого смысла.
> порядок внутри ORDER BY имеет значение, верно?
Да.
> Где можно почитать про правильный выбор полей, которые нужно ложить в ORDER BY?
Основное правило в начало идут низко кардинальные поля, по которым часто идет фильтрация
> если у вас партиционирование по дате, класть ее в ORDER BY нет никакого смысла.__
Подскажите, почему? Смотрю сейчас тестовые данные в туториале, там именно так и сделано
источник

l

lnuynxa in ClickHouse не тормозит
Дмитрий
> если у вас партиционирование по дате, класть ее в ORDER BY нет никакого смысла.__
Подскажите, почему? Смотрю сейчас тестовые данные в туториале, там именно так и сделано
Это две большие разницы:)
в примере идет партицирование по месяцам, а в ORDER BY идет уже сама дата
источник

l

lnuynxa in ClickHouse не тормозит
Если же ты сделаешь партицирование по дате, то у тебя в одной партиции будет одна и таже дата, и смысла от такой колонки в ORDER BY не будет.
источник

Д

Дмитрий in ClickHouse не тормозит
lnuynxa
Это две большие разницы:)
в примере идет партицирование по месяцам, а в ORDER BY идет уже сама дата
Да. Но допустим если партиционирование по самой дате (а не по YYYYMM) разве внутри парта сортировка по дате не поможет отсекать большую часть данных при наличии в условии самой даты?
источник

l

lnuynxa in ClickHouse не тормозит
Дмитрий
Да. Но допустим если партиционирование по самой дате (а не по YYYYMM) разве внутри парта сортировка по дате не поможет отсекать большую часть данных при наличии в условии самой даты?
у тебя внутри парта будет только 1 дата, допустим '2020-08-10', вся колонка целиком одно и тоже значение, отсечь ничего не получится
источник

Д

Дмитрий in ClickHouse не тормозит
А. Я понял вас) там тип Date, действительно
источник
2020 August 02

AV

Alexander Vaskin in ClickHouse не тормозит
Всем привет! Cтолкнулся с ошибкой 400 Bad request при batch insert в jdbc driver. Запрос выглядит так:

http-outgoing-2 >> "POST /?query=INSERT+INTO+objects+ЗДЕСЬ МНОГО КОЛОНОК++FORMAT+TabSeparated&database=default&user=default&compress=1 HTTP/1.1
http-outgoing-2 >> "Transfer-Encoding: chunked[\r][\n]"
http-outgoing-2 >> "Host: localhost:33128[\r][\n]"
http-outgoing-2 >> "Connection: Keep-Alive[\r][\n]"
http-outgoing-2 >> "User-Agent: Apache-HttpClient/4.5.12 (Java/14)[\r][\n]"
http-outgoing-2 >> "[\r][\n]"
http-outgoing-2 >> "2f23[\r][\n]"
http-outgoing-2 >> “ЗДЕСЬ ДАННЫЕ”

То есть в случае batch запрос разбит на 2 части, 1 часть в query param, вторая в body. В документации нашел:

Send the request as a URL ‘query’ parameter, or as a POST. Or send the beginning of the query in the ‘query’ parameter, and the rest in the POST (we’ll explain later why this is necessary). The size of the URL is limited to 16 KB, so keep this in mind when sending large queries.

У меня как раз больше из-за большого числа колонок. А как быть то в этой ситуации?
источник

AV

Alexander Vaskin in ClickHouse не тормозит
Причем, если это отдельный insert, ошибки нет, строка запроса выглядит так:
http-outgoing-2 >> "POST /?database=default&query_id=734db7fa-686d-4b66-831a-be65543b5e83&compress=1&user=default HTTP/1.1[\r][\n]"
То есть весь запрос в body
источник

СЯ

Сергей Ярошенко... in ClickHouse не тормозит
Код состояния ответа "HTTP 400 Bad Request" указывает, что сервер не смог понять запрос из-за недействительного синтаксиса. Клиент не должен повторять этот запрос без изменений.
источник

P

Pavel in ClickHouse не тормозит
Alexander Vaskin
Всем привет! Cтолкнулся с ошибкой 400 Bad request при batch insert в jdbc driver. Запрос выглядит так:

http-outgoing-2 >> "POST /?query=INSERT+INTO+objects+ЗДЕСЬ МНОГО КОЛОНОК++FORMAT+TabSeparated&database=default&user=default&compress=1 HTTP/1.1
http-outgoing-2 >> "Transfer-Encoding: chunked[\r][\n]"
http-outgoing-2 >> "Host: localhost:33128[\r][\n]"
http-outgoing-2 >> "Connection: Keep-Alive[\r][\n]"
http-outgoing-2 >> "User-Agent: Apache-HttpClient/4.5.12 (Java/14)[\r][\n]"
http-outgoing-2 >> "[\r][\n]"
http-outgoing-2 >> "2f23[\r][\n]"
http-outgoing-2 >> “ЗДЕСЬ ДАННЫЕ”

То есть в случае batch запрос разбит на 2 части, 1 часть в query param, вторая в body. В документации нашел:

Send the request as a URL ‘query’ parameter, or as a POST. Or send the beginning of the query in the ‘query’ parameter, and the rest in the POST (we’ll explain later why this is necessary). The size of the URL is limited to 16 KB, so keep this in mind when sending large queries.

У меня как раз больше из-за большого числа колонок. А как быть то в этой ситуации?
Если jdbc, то пользуйте preparedstatement :)
источник

AV

Alexander Vaskin in ClickHouse не тормозит
PreparedStatement использую
источник

P

Pavel in ClickHouse не тормозит
Не оч понятна тогда связь с ошибкой http клиента
источник

AV

Alexander Vaskin in ClickHouse не тормозит
jdbc-драйвер использует org.apache.httpcomponents.httpclient
источник

KS

Konstantin Sevastian... in ClickHouse не тормозит
подскажите, чтобы сделать дистрибуцию по типу UUID единственный вариант делать
cityHash64(toString(UUID))
?  или как то еще можно?
источник