I have two table as follows:
Table A
userid | code | code_name | property_id
0001 | 1 | apple_id | Y1234
0031 | 4 | mango_id | G4567
0008 | 3 | grape_id | H1209
00013 | 2 | peach_id | Z5643
Table 2
apple_id | mango_id | grape_id | peach_id | new_id
Y1234 | R1890 | | | N456098
| G4567 | | B3490 | N002345
T3336 | | H1209 | F3467 | N129087
| D7865 | J6543 | Z5643 | N109876
Desired Resultant table
userid | new_id
0001 | N456098
0031 | N002345
0008 | N129087
00013 | N109876
Using the code_name in Table A, I would like to find the respective property_id from Table A in Table B. Basically, match on the column name in Table B. The aim is to get the corresponding new_id.
Apple, mango, grape and peach ids can be the same. However, new_id values will be unique.
Is this possible in Hive? There does not seem to be any unpivot/pivot functionality in Hive.
Any help would be really great. Thanks!
Whenever I want to pivot a table in Hive, I collect key:value
pairs to a map and then reference each key in the next level, creating new columns. This is the opposite of that.
Query:
select a.userid, y.new_id
from (
select new_id, fruit_name, fruit_code
from (
select new_id, map("apple_id", apple_id
, "mango_id", mango_id
, "grape_id", grape_id
, "peach_id", peach_id) as fruit_map
from table_2 ) x
lateral view explode(fruit_map) exptbl1 as fruit_name, fruit_code ) y
join table_A a
on (y.fruit_code=a.property_id)
Output:
0001 N456098
0031 N002345
0008 N129087
00013 N109876