Size: a a a

ClickHouse не тормозит

2020 June 21

DC

Denny Crane (I don't... in ClickHouse не тормозит
Dj
вопрос такой, при хеш-джоин КХ правую таблицу считывает первым селектом и всегда в память кладет в одном экземпляре?
я просто примерно интуитивно прикинул, должно использоватся памяти в разы меньше.. или там на потоки чего то где то умножается?.
Там такой хеш супер жадный и память скачками удваивается по мере увеличения кол-ва строк.
источник

D

Dj in ClickHouse не тормозит
Denny Crane (I don't work at Yandex (never did))
Там такой хеш супер жадный и память скачками удваивается по мере увеличения кол-ва строк.
блин хеш курильщика... ок... а есть где нить рассказ на ютюбе про его жадность? а то назревает новый ишшю на "хешджойны здорового человека", но  в С++ читать  не потяну по времени
источник

D

Dj in ClickHouse не тормозит
Ilona Gladysheva
у меня при положительных значениях вообще тоталы пропали..
так оно и должно фильтроватся... и тоталы, и не тоталы, или я не прав?
источник

DC

Denny Crane (I don't... in ClickHouse не тормозит
Dj
блин хеш курильщика... ок... а есть где нить рассказ на ютюбе про его жадность? а то назревает новый ишшю на "хешджойны здорового человека", но  в С++ читать  не потяну по времени
Я вот тут пытался это показать https://github.com/ClickHouse/ClickHouse/issues/10409
источник

IG

Ilona Gladysheva in ClickHouse не тормозит
Dj
так оно и должно фильтроватся... и тоталы, и не тоталы, или я не прав?
так вот мне казалось, что в CH having принимается во внимание при rollup, но видимо нет(
источник

IG

Ilona Gladysheva in ClickHouse не тормозит
получается, чтобы посчитать rollup с учетом having нужно вложенный select делать и опять группировать и считать до фига строк?😁
источник

D

Dj in ClickHouse не тормозит
Ilona Gladysheva
так вот мне казалось, что в CH having принимается во внимание при rollup, но видимо нет(
должен принимать "это норма"
источник

D

Dj in ClickHouse не тормозит
select a, sum(b)
from
(
select 1 a, 100 b from dual
union all
select 2, 200 from dual
union all
select 2, 300 from dual
union all
select 3, 300 from dual
) t
group by rollup(a)
having sum(b) < 500
order by a

===
оракл
A  SUM(B)
1  100
3  300

КХ
1  100
3  300

тут все по стандарту. может раньше был баг и его исправили...

а вот с негативными поинтересней...
источник

IG

Ilona Gladysheva in ClickHouse не тормозит
Dj
select a, sum(b)
from
(
select 1 a, 100 b from dual
union all
select 2, 200 from dual
union all
select 2, 300 from dual
union all
select 3, 300 from dual
) t
group by rollup(a)
having sum(b) < 500
order by a

===
оракл
A  SUM(B)
1  100
3  300

КХ
1  100
3  300

тут все по стандарту. может раньше был баг и его исправили...

а вот с негативными поинтересней...
не, смотрите, как я понимаю rollup используется для подсчета промежуточных итогов и у меня стоит задача посчитать все, где сумма(б) < 500. Вопрос, где итоги? ))
источник

IG

Ilona Gladysheva in ClickHouse не тормозит
Dj
select a, sum(b)
from
(
select 1 a, 100 b from dual
union all
select 2, 200 from dual
union all
select 2, 300 from dual
union all
select 3, 300 from dual
) t
group by rollup(a)
having sum(b) < 500
order by a

===
оракл
A  SUM(B)
1  100
3  300

КХ
1  100
3  300

тут все по стандарту. может раньше был баг и его исправили...

а вот с негативными поинтересней...
точнее даже так, есть задача сгруппировать записи, и посчитать тоталы для тех, у кого сумма меньше заданного значения. Видимо это одним запросом не сделать, придется делать подзапрос.
источник

AK

Anton Khokhrin in ClickHouse не тормозит
Ilona Gladysheva
точнее даже так, есть задача сгруппировать записи, и посчитать тоталы для тех, у кого сумма меньше заданного значения. Видимо это одним запросом не сделать, придется делать подзапрос.
Так считает же. Я читаю и не могу понять, что вас не устраивает в результате
источник

IG

Ilona Gladysheva in ClickHouse не тормозит
Anton Khokhrin
Так считает же. Я читаю и не могу понять, что вас не устраивает в результате
нет общего тотала
источник

IG

Ilona Gladysheva in ClickHouse не тормозит
если убрать having, то получится:
источник

D

Dj in ClickHouse не тормозит
Ilona Gladysheva
не, смотрите, как я понимаю rollup используется для подсчета промежуточных итогов и у меня стоит задача посчитать все, где сумма(б) < 500. Вопрос, где итоги? ))
вам по любому делать подзапросы либо массивами, но в целом я в экзистенциальный кризис впал...  я проверил на оракле, и там точно так же (тотал фильтруется на плюсе, и не фильтруется на минусе , и я не понимаю почему)... и зачем я открыл этот чат в вечер воскресенья 🤷‍♂️
источник

AK

Anton Khokhrin in ClickHouse не тормозит
Ilona Gladysheva
нет общего тотала
С 0 общий =-300
источник

IG

Ilona Gladysheva in ClickHouse не тормозит
Anton Khokhrin
С 0 общий =-300
да, но он общий по всем записям, а не по тем, которые попадают под условие. Я понимаю логику, сначала работает group by и rollup, потом having, но с точки зрения usecase такая комбинация становится бессмысленной. Потому что тоталы, которые вы видите в таблице не сходятся по строкам, которые вы видите в той же таблице
источник

IG

Ilona Gladysheva in ClickHouse не тормозит
Dj
вам по любому делать подзапросы либо массивами, но в целом я в экзистенциальный кризис впал...  я проверил на оракле, и там точно так же (тотал фильтруется на плюсе, и не фильтруется на минусе , и я не понимаю почему)... и зачем я открыл этот чат в вечер воскресенья 🤷‍♂️
сорри сорри ))
источник

AK

Anton Khokhrin in ClickHouse не тормозит
Ilona Gladysheva
да, но он общий по всем записям, а не по тем, которые попадают под условие. Я понимаю логику, сначала работает group by и rollup, потом having, но с точки зрения usecase такая комбинация становится бессмысленной. Потому что тоталы, которые вы видите в таблице не сходятся по строкам, которые вы видите в той же таблице
Тогда да. Мы по-разному понимаем логику
источник

D

Dj in ClickHouse не тормозит
Ilona Gladysheva
да, но он общий по всем записям, а не по тем, которые попадают под условие. Я понимаю логику, сначала работает group by и rollup, потом having, но с точки зрения usecase такая комбинация становится бессмысленной. Потому что тоталы, которые вы видите в таблице не сходятся по строкам, которые вы видите в той же таблице
в других базах есть поддержка HAVING (condition) OR Groupkeys
источник

D

Dj in ClickHouse не тормозит
Т.е. можно тоталс безусловно выводить
источник