• 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;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    这一步会将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;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    三、映射结束以后再使用 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;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

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

  • 相关阅读:
    ESP8266-Arduino编程实例-BH1750FVI环境光传感器驱动
    java 业务幂等解决方案
    自动化测试 | 测试老鸟总结,你们项目自动化测试实施成功与否的因素
    简谈设计模式之建造者模式
    计算机毕业设计springboot+vue基本微信小程序的考试系统
    【分享】如何自动同步企业微信外部客户信息到CRM系统?
    react等效memo的方法
    linux结束 java jar
    Lambda表达式的简化
    ZooKeeper的权限控制--ACL
  • 原文地址:https://blog.csdn.net/lingan_Hong/article/details/126122380