Объединить несколько столбцов с таблицей сопоставления - PullRequest
0 голосов
/ 04 мая 2020

Мне нужна помощь для этого. У меня есть таблица клиента и таблица сопоставления. Мне нужно присоединиться к столам. Сценарий выглядит следующим образом:

Таблица 1 (клиент):

uid  job  level  status  
1    64   68     75
2    65   69     75
3    66   68     76

Таблица 2 (таблица сопоставления):

groupid  lookup_id  lookup_desc
1               64  biker                
1               65  stuntman                
1               66  driver  
2               68  low         
2               69  high         
3               75  individu         
3               76  corporate         

Запрос:

select
      uid,b.lookup_desc job,
      c.lookup_desc level,
      d.lookup_desc status
from 
      customer a
left join mapping_table b on a.job = b.lookup_id
left join mapping_table c on a.job = c.lookup_id
left join mapping_table d on a.job = d.lookup_id

Я знаю, что этот запрос можно запустить. но я хочу сделать это проще / быстрее или, может быть, у вас есть какие-либо предложения с моими запросами? или этот запрос - лучший подход (тройное соединение слева)?

Я работаю над Hiveql.

Любая помощь будет полезна;)

Ответы [ 2 ]

2 голосов
/ 04 мая 2020

Полагаю, вы не хотите, чтобы запрос повторял задание три раза, поэтому я думаю, что вы имеете в виду:

select c.uid, j.lookup_desc as job,
       l.lookup_desc as level,
       s.lookup_desc as status
from customer c left join
     mapping_table j
     on c.job = j.lookup_id left join
     mapping_table l
     on c.level= l.lookup_id left join
     mapping_table s
     on c.status= s.lookup_id;

Другое изменение, которое я сделал, - это использование значимых псевдонимов таблиц, что влияет на ясность кода, но не производительность.

В противном случае с вашим кодом все в порядке.

В большинстве баз данных вам нужен индекс mapping_table(lookup_id, lookup_desc). Тем не менее, я не думаю, что такой индекс поможет в Hive.

0 голосов
/ 04 мая 2020

Чтобы сделать это быстрее, единственное, что я хотел бы добавить (из вашего примера), это сделать указатель на customer.job и mapping_table.lookup_id

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...