Оптимизация множественного объединения в улье - PullRequest
0 голосов
/ 04 июня 2018

У меня есть четыре таблицы Hive:

A - 1.2 billion records and 250 GB
B - 4  billion records and 1 TB
C - 30 billion records and 2 TB
D - 2 billion records and 100 GB

Все таблицы не разбиты на разделы. A - родитель B (отношение внешнего ключа к одному), B - родитель C (один ко многим).отношение внешнего ключа) и C является родителем D (отношение внешнего ключа один ко многим)

Теперь я должен объединить эти таблицы;Что было бы лучшим подходом для объединения этих таблиц

Мне нужно создать таблицу E с столбцами из A, B, C, D дубликатов значений в столбцах A, B, C в порядке

Ответы [ 2 ]

0 голосов
/ 06 июня 2018

Не уверен, что это лучший подход.Я создал промежуточные разделенные таблицы для всех таблиц, разделенных на общий столбец.Теперь для каждого раздела я постепенно запускаю запрос на соединение.

0 голосов
/ 05 июня 2018

Таблицы довольно большие, и объединение карт в этом случае не подходит.Если one A to many B и one B to many C и one C to many D и вы присоединяетесь к ним одновременно, то очевидно, что такое объединение вызывает умножение огромных строк.И это вполне нормальное поведение присоединения.Скажем, если A имеет 10 ключей и B имеет 100 строк на каждую клавишу в A, то после объединения их будет 10 x 100 = 1000 строк (если ключ объединения в A уникален) и даже больше, если ключ объединенияв A не уникален.Это приводит к огромному набору данных в редукторе соединений.
И я полагаю, что вашей конечной целью является объединение строк.В таком случае наилучшим подходом было бы предварительное агрегирование строк в требуемое зерно и объединение агрегированных наборов данных:

select A.*, B.* --aggregate here if necessary
(select <some aggregation here > from A group by <key> ) A
join
(select <some aggregation here > from B group by <key> ) B
on A.key=B.key
and so on...
...