КХ?
Пытаюсь сджойнить 2 таблицы по 100 млн записей в каждой обычным JOIN' ом- КХ падает.
Слышал, что можно использовать array_join для этих целей, но не совсем понятно как.
Заранее спасибо!
array join — это обычный explode массивов, к джойну таблиц отношения не имеет а прям надо сджойнить 100млн * 100 млн записей, или можно каждую таблицу "схлопнуть" агрегирующим подзапросом и уже результаты подзапросов джойнить?
Нет, не декартово произведение. Очень грубо говоря: Есть таблица измерений, и есть таблица фактов. Нужно собрать витрину. Джойню по бизнес-ключу.
я к тому, что таблицу фактов можно сначала сагрегировать по ключу измерения, а потом уже джойнить на измерения
Можно пробовать SEMI JOIN, ANY JOIN, но 100кк*100кк - в любом случае не лучшая идея, надо сокращать.
То есть что-то типа: SELECT * FROM (SELECT * FROM table1 WHERE id = 1) t1 JOIN (SELECT * FROM table2 WHERE id = 1)t2 ON t1.id = t2.id? Но как тогда реализовать его для всех id? Если я правильно понимаю, в КХ нет PL/pgSQL, чтобы написать цикл по id
я имел в виду select * from (select id, sum(), avg() ... from facts group by id) join (select dimensions by id) on t1.id = t2.id
При таком запросе мы же получим уже единствеенную сагрегированную запись для каждого id... А мне нужно сохранить все записи
понял боюсь, значит, вы попали в ситуацию "не надо тащить dimensional modeling в clickhouse в том виде, в каком вы привыкли, будут проблемы" можете попробовать найти их решение через join algorithm = partial_merge, или почитать эту страничку https://clickhouse.com/docs/en/getting-started/example-datasets/star-schema или перетащить все джойны на уровень какого-нибудь MPP ETL типа спарка, а в клике держать уже готовые витрины и т.д.
Спасибо, изучу!
Обсуждают сегодня