Hive - 蜂巢中的Unpivot功能

act*_*ner 2 sql hive unpivot

我有两张表如下:

表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
Run Code Online (Sandbox Code Playgroud)

表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
Run Code Online (Sandbox Code Playgroud)

期望的结果表

userid | new_id
0001   | N456098
0031   | N002345
0008   | N129087
00013  | N109876
Run Code Online (Sandbox Code Playgroud)

使用表A中的code_name,我想从表B中的表A中找到相应的property_id.基本上,匹配表B中的列名.目的是获取相应的new_id.

苹果,芒果,葡萄和桃子ids可以是一样的.但是,new_id值将是唯一的.

这可能在Hive中吗?在Hive中似乎没有任何unpivot/pivot功能.

任何帮助都会非常棒.谢谢!

gob*_*s14 15

每当我想在Hive中透视表时,我会将key:value对收集到地图中,然后在下一级引用每个键,创建新列.这与此相反.

查询:

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)
Run Code Online (Sandbox Code Playgroud)

输出:

0001    N456098
0031    N002345
0008    N129087
00013   N109876
Run Code Online (Sandbox Code Playgroud)