蜂巢 - 蜂房中的功能逆透视蜂巢 - 蜂房中的功能逆透视(Hive - Unpivot functi

2019-05-12 10:17发布

我有两个表,如下所示:

表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

表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

期望的合成表

userid | new_id
0001   | N456098
0031   | N002345
0008   | N129087
00013  | N109876

使用表A中的CODE_NAME,我想找到表A表B.各PROPERTY_ID基本上,在表B.列名匹配的目的是得到相应的NEW_ID。

苹果,芒果,葡萄和桃IDS可以是相同的。 然而,NEW_ID值​​将是独一无二的。

这是可能的蜂巢? 似乎没有要在蜂巢任何逆转置/透视功能。

任何帮助将是真正伟大的。 谢谢!

Answer 1:

每当我想在转动蜂巢一个表,我收集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)

输出

0001    N456098
0031    N002345
0008    N129087
00013   N109876


Answer 2:

实际上,你根本无需UNPIVOT得到的结果。

SELECT * FROM 
(
    SELECT userid,
        CASE WHEN property_id = apple_id THEN new_id  
             WHEN property_id = mango_id THEN new_id  
             WHEN property_id = grape_id THEN new_id  
             WHEN property_id = peach_id THEN new_id
        END AS newid
    FROM
    (SELECT * FROM a FULL JOIN b) X
) y
WHERE newid IS NOT NULL;

结果:

y.userid  y.newid
1         N456098
31        N002345
8         N129087
13        N109876


文章来源: Hive - Unpivot functionality in hive
标签: sql hive unpivot