Size: a a a

ClickHouse не тормозит

2020 June 17

l

lnuynxa in ClickHouse не тормозит
Dj
т.е. у нас проблема, допустим 60 дней, дневные партиции, по 100ГБ в день. последний день льется, остальные уже залились и схлопнулись. Если пустить запрос - он будет читать все 60 дней, и пытаться их схлопывать.
Суть тикета: не схлопывать старые партиции если пользователь говорит что между партициями дупликатов быть не может.
просто это вообще очень странно, что FINAL в селекте схлопывать данные должен в контексте всех данных а не 1 партиции. ведь на диске схлопываются в пределах 1 партиции
источник

D

Dj in ClickHouse не тормозит
workaround есть, не спорю...
можно сделать подзапрос с кучей argMax.
но тогда ловите кучу сырых данных на координаторе, так как только запрос самого нижнего уровня будет отработан на шарде
источник

D

Dj in ClickHouse не тормозит
lnuynxa
просто это вообще очень странно, что FINAL в селекте схлопывать данные должен в контексте всех данных а не 1 партиции. ведь на диске схлопываются в пределах 1 партиции
это потому что КХ не запрещает partition Key не как префикс  PK  (другие базы форсят это)
источник

D

Dj in ClickHouse не тормозит
поэтому для сохранения совместимости я предложил доп-настройку, в 90% случаев её можно смело выставлять в тру
источник

l

lnuynxa in ClickHouse не тормозит
Dj
argMax тупит меньше всех, но я так понял FINAL под капотом делает что-то похожее
Я начал писать LIMIT 1 BY в последнее время потому, что это чуть чище выходит и кмк есть все шансы. что она первая наконец получит оптимизацию от ORDER BY таблицы
источник

l

lnuynxa in ClickHouse не тормозит
а так. она несколько медленнее, да
источник

D

Dj in ClickHouse не тормозит
lnuynxa
Я начал писать LIMIT 1 BY в последнее время потому, что это чуть чище выходит и кмк есть все шансы. что она первая наконец получит оптимизацию от ORDER BY таблицы
вам все равно надо доп. подзапрос делать в итоге же
источник

D

Dj in ClickHouse не тормозит
значит получите сырые данные на координатор ноде уже по сети... а если их много - может быть нехорошо...
источник

l

lnuynxa in ClickHouse не тормозит
Dj
вам все равно надо доп. подзапрос делать в итоге же
Ну в нашем случае LIMIT BY находится в самом глубоком запросе
источник

D

Dj in ClickHouse не тормозит
у вас итого 60 миллиардов строк из них 1 млрд. "грязные", т.е. версия старая. Вы из подзапроса возвращаете 59 млрд из подзапроса и дальше уже строите свою логику аггрегаций (вы не можете аггрегировать пока не вытащите самые "новые" данные
источник

l

lnuynxa in ClickHouse не тормозит
Dj
у вас итого 60 миллиардов строк из них 1 млрд. "грязные", т.е. версия старая. Вы из подзапроса возвращаете 59 млрд из подзапроса и дальше уже строите свою логику аггрегаций (вы не можете аггрегировать пока не вытащите самые "новые" данные
GROUP BY возвращает 59 млрд?
источник

D

Dj in ClickHouse не тормозит
lnuynxa
GROUP BY возвращает 59 млрд?
я в гисты не очень, вот вам пример
drop table if exists test;
create table test (
 k1 UInt64, v1 UInt64, p1 UInt64, ver UInt32
)
ENGINE=ReplacingMergeTree(ver)
PARTITION BY (p1)
ORDER BY (k1);
;

insert into test select number as k1, cityHash64(number,10) as v1, cityHash64(number,2)%10 as p1, 1 as ver from numbers(10000000);
insert into test select number as k1, cityHash64(number,11) as v1, cityHash64(number,3)%10 as p1, 2 as ver from numbers(10000000);
insert into test select number as k1, cityHash64(number,12) as v1, cityHash64(number,4)%10 as p1, 3 as ver from numbers(10000000);
-- using argMax
select k1, sum(v1) totalSum
from (select k1, argMax(v1, ver) v1 from test group by k1)
group by k1
order by totalSum desc
Limit 10;

-- using final
select k1, sum(v1) totalSum from test final group by k1
order by totalSum desc
Limit 10;
источник

D

Dj in ClickHouse не тормозит
даже не делая оптимайз argMax быстрее... но суть в том что верхний запрос будет испольняться уже не на шардах (в варианте с аргмах)
источник

l

lnuynxa in ClickHouse не тормозит
Dj
даже не делая оптимайз argMax быстрее... но суть в том что верхний запрос будет испольняться уже не на шардах (в варианте с аргмах)
Ну кстати недавно впиливали локальные GROUP BY если key находится в sharding key
но выключено по дефолту.
И это не относится к партициям, да
источник

D

Dj in ClickHouse не тормозит
lnuynxa
Ну кстати недавно впиливали локальные GROUP BY если key находится в sharding key
но выключено по дефолту.
И это не относится к партициям, да
да, хорошая вещь тоже, но проблему финала не решает. там про финал и уникальность несколько предыдущих тикетов уже есть, но там очень радикальные методы
источник

l

lnuynxa in ClickHouse не тормозит
Да, ты прав. FINAL в SELECT мержит данные между партициями. имхо это очень странно
источник

D

Dj in ClickHouse не тормозит
lnuynxa
Да, ты прав. FINAL в SELECT мержит данные между партициями. имхо это очень странно
Если у тебя партиции по месяцам а ключ userId и надо брать последние данные для каждого юзера - то все правильно как раз таки. Просто в других базах такого нет...
источник

D

Dj in ClickHouse не тормозит
lnuynxa
Да, ты прав. FINAL в SELECT мержит данные между партициями. имхо это очень странно
Проблема не только в этом. Он тормозит даже если запросить данные с одной партиции с одним партом который уже был замерджен. ) FINAL  очень "тупой" на данный момент.
источник

l

lnuynxa in ClickHouse не тормозит
Dj
Если у тебя партиции по месяцам а ключ userId и надо брать последние данные для каждого юзера - то все правильно как раз таки. Просто в других базах такого нет...
Ну я если честно ожидал поведение аналогичное обычным мержам.
Я могу представить ситуации когда оправдано и то поведение что есть(допустим самминг и другие движки) и когда поведение аналогичное обычным мержам(то что вы хотите в pull реквесте, да)
источник

l

lnuynxa in ClickHouse не тормозит
Dj
Проблема не только в этом. Он тормозит даже если запросить данные с одной партиции с одним партом который уже был замерджен. ) FINAL  очень "тупой" на данный момент.
А тут на самом деле нужно будет делать проверку, не является ли этот одинокий парт результатом вставки(но это тривиально у таких партов уровень 0), тк во время вставки дубликаты не удаляются
источник