Hive Full Outer Join с 4 таблицами на одном ключе, разные схемы - PullRequest
0 голосов
/ 15 марта 2019

Я пытаюсь сделать полное внешнее соединение за 4 столами Hive. Ключ JOIN такой же, но схема из 4 таблиц отличается. Я хочу создать все значения столбцов для всех идентификаторов, представленных в 4 таблицах. Но столбец id должен присутствовать только один раз со всеми включенными значениями, а не 4 раза (каждый из одной таблицы)

Запрос 1

select count(*)
from table1 f FULL OUTER JOIN table2 u on f.id=u.id
FULL OUTER JOIN table3 v on f.id=v.id
FULL OUTER JOIN table4 v_in on f.id=v_in.id;

Количество = 2787037

Запрос 2

select count(*)
from table1 f FULL OUTER JOIN table2 u on f.id=u.id
FULL OUTER JOIN table3 v on f.id=v.id
FULL OUTER JOIN table4 v_in on f.id=v_in.id
group by f.id,u.id,v.id,v_in.id, f.name, f.amt, f.add, u.dt, u.ts, v.ea,v.rd, 
v_in.c1,v_in.c2,v_in.c3,v_in.c4,v_in.c5;

Количество = 2787037

Как сгенерировать все значения id из 4 таблиц в одном столбце вместе с другими значениями столбца?

Есть ли лучший способ сделать это?

1 Ответ

0 голосов
/ 15 марта 2019

Вы должны просто выбрать столбцы, которые вы хотите.Я думаю, что вы хотите coalesce():

select coalesce(f.id, u.id, v.id, v_in.id) as id,
       f.name, f.amt, f.add, u.dt, u.ts, v.ea, v.rd, 
       v_in.c1, v_in.c2, v_in.c3, v_in.c4, v_in.c5
from . . .;

С full outer join вам нужно много coalesce() s:

select . . .
from table1 f full join
     table2 u
     on f.id = u.id full join
     table3 v
     on v.id in (f.id, u.id) full join
     table4 v_in
     on v_in.id in (f.id, u.id, v.id);
...