184 похожих чатов

Коллеги, добрый день! Подскажите, пожалуйста, как правильно сджойнить 2 таблицы в

КХ?
Пытаюсь сджойнить 2 таблицы по 100 млн записей в каждой обычным JOIN' ом- КХ падает.

Слышал, что можно использовать array_join для этих целей, но не совсем понятно как.
Заранее спасибо!

9 ответов

9 просмотров

array join — это обычный explode массивов, к джойну таблиц отношения не имеет а прям надо сджойнить 100млн * 100 млн записей, или можно каждую таблицу "схлопнуть" агрегирующим подзапросом и уже результаты подзапросов джойнить?

Евгений Пименов- Автор вопроса
ivan
array join — это обычный explode массивов, к джойн...

Нет, не декартово произведение. Очень грубо говоря: Есть таблица измерений, и есть таблица фактов. Нужно собрать витрину. Джойню по бизнес-ключу.

я к тому, что таблицу фактов можно сначала сагрегировать по ключу измерения, а потом уже джойнить на измерения

Можно пробовать SEMI JOIN, ANY JOIN, но 100кк*100кк - в любом случае не лучшая идея, надо сокращать.

Евгений Пименов- Автор вопроса
ivan
я к тому, что таблицу фактов можно сначала сагреги...

То есть что-то типа: 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 * FROM ...

я имел в виду select * from (select id, sum(), avg() ... from facts group by id) join (select dimensions by id) on t1.id = t2.id

Евгений Пименов- Автор вопроса
ivan
я имел в виду select * from (select id, sum(), avg...

При таком запросе мы же получим уже единствеенную сагрегированную запись для каждого id... А мне нужно сохранить все записи

Евгений Пименов
При таком запросе мы же получим уже единствеенную...

понял боюсь, значит, вы попали в ситуацию "не надо тащить dimensional modeling в clickhouse в том виде, в каком вы привыкли, будут проблемы" можете попробовать найти их решение через join algorithm = partial_merge, или почитать эту страничку https://clickhouse.com/docs/en/getting-started/example-datasets/star-schema или перетащить все джойны на уровень какого-нибудь MPP ETL типа спарка, а в клике держать уже готовые витрины и т.д.

Похожие вопросы

Обсуждают сегодня

Какой-то там пердун в 90-х решил, что есть какая-то разная типизация. Кого вообще это волнует?
КТ315
49
void terminal_scroll() { memmove(terminal_buffer, terminal_buffer + VGA_WIDTH, buffer_size - VGA_WIDTH); memset(terminal_buffer + buffer_size - VGA_WIDTH, 0, VGA_WIDTH); ...
Егор
47
Всем привет! Подскажите, пожалуйста, в чем ошибка? Настраиваю подключение к MySQL. Либы лежат рядом с exe. Все как по "учебнику"
Евгений
16
А можете как-то проверить меня по знаниям по ассемблеру?
A A
132
Здравствуйте! У меня появилась возможность купить книгу "Изучай Haskell во имя добра!". Но я где-то слышал, что эта книга устарела. Насколько это правда??
E
22
Здравствуйте! Я вот на stepic решаю задачи на хаскеле https://stepik.org/lesson/8443/step/8?unit=1578 мой код import Data.List (isInfixOf) removing :: String -> [String] ->...
E
10
Камрады, кто тесно работал с vtv, хотел уточнить. Ширина column задаётся жёстко на этапе создания дерева или можно в рантайме ее менять программно (не мышкой)?
Ed Doc
10
да ладно ... что там неочевидного ? глянуть в исх-ки датасета и/или кверика чтобы понять в каком месте и как выполняется обращения к св-вам blablaSQL - минутное дело, даже е...
Сергей
7
Здесь для arm кто-нибудь кодит ?
Nothing
52
Всем привет, у меня есть сервер принимающий входящие HTTP подключения, как проверить, что подключение было через прокси или нет, есть какие то поля в заголовках по которым мо...
DS
8
Карта сайта