делаю выборку select val, count() as cnt from (select arrayJoin(a) as val from test where x=1)
в процессе выполнения 3 сервера (кроме вызывающего) не имеют нагрузки, передают по сети свои куски данных, а агрегация происходит на вызывающем шарде, где мы упираемся сразу и в сеть, и в процессор.
Нет ли возможности выполнить запрос так, чтобы предагрегация была выполнена еще на шардах?
т.е. хотелось бы получить нечто типа select val, sum(cnt) from (select val, count() as cnt from (select arrayJoin(a) as val from test where x=1)) group by val
где на вызывающем сервере выполняется лишь суммирование, а первоначальная группировка - на удаленных машинках.
group by должен быть внутри () select.... ( -- инициатор select ... -- инициатор (select from distributed gruop by --- шард. ) gruop by )gruop by select arrayJoin(a) as val, count() from test where x=1 group by val
Обсуждают сегодня