hive sql 按照字段拆分之后(列转行)进行映射,再进行列转行

这个需求会稍微复杂一点:
首先我们有一张 table_A表:

idcode
10010,1,3,4
10022,3
10030,24

还有一张 code表

codecode_value
0法人
1董事
2股东
3监事
4高管

我们现在的需求是想把code表的value按照code值给映射回table_A ,如下:

idcode
1001法人,董事,监事,高管
1002股东,监事
1003法人,股东,高管

使用Hive SQL来实现具体如下:

一、先进行按字段拆分,列转行
其语法如下:

select  f.id, f.code, new_code 
from
    (select id,code_value  from table_A 
     where 字段x = 条件x
     ) f  
lateral view explode(split(a.code, ',')) myTable as new_code;

这一步会将code字段的0,1,2,3拆分开。
注意,这里的new_code不属于f表,不需要加f.。

二、拆分完成以后进行case when映射

select t.id, t.code,
       case new_code 
       when '0' when '法人'
       when '1' when '董事'
       when '2' when '股东' 
       when '3' when '监事'
       when '4' when '高管'
       end as new_value
from       
        (select  f.id, f.code,new_code 
        from
             (select id,code_value  from table_A 
              where 字段x = 条件x
              ) f  
        lateral view explode(split(a.code, ',')) myTable as new_code
        ) t;

三、映射结束以后再使用 concat_ws进行列转行

select v.id, concat_ws(',', collect_list(new_value)) as concat_value
from
      (
        select t.id, t.code,
               case new_code 
               when '0' when '法人'
               when '1' when '董事'
               when '2' when '股东' 
               when '3' when '监事'
               when '4' when '高管'
               end as new_value 
       from
        (select  f.id, f.code,new_code 
        from
             (select id,code_value  from table_A 
              where 字段x = 条件x
              ) f  
        lateral view explode(split(a.code, ',')) myTable as new_code
        ) t
    ) v   
group by  v.id;

第三步结束就可以直接打成我们的需求了。
但是一般实际的生产过程中,表会复杂很多,也会有其他的字段,这里可能最终还需要进行把多余的字段join回去,这里不在赘述。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值