• 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回去,这里不在赘述。

  • 相关阅读:
    PostgreSQL文本搜索(二)——表和索引
    Flask接口
    贪心算法和动态规划算法选择依据
    火眼金睛破局ES伪慢查询
    我的创作纪念日--码农阿豪
    提升职场竞争力,掌握高级开发面试知识!
    JVM——垃圾回收机制和内存分配策略
    常用的openssl命令
    【计算机网络】数据链路层
    pcd和ply方式存储点云简单介绍,以及ply格式转换为pcd格式点云方法
  • 原文地址:https://blog.csdn.net/lingan_Hong/article/details/126122380