栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

hive的行列转换进阶之字段名与字段值的互相转换,str

hive的行列转换进阶之字段名与字段值的互相转换,str

本文列举在一些特殊需求下,比如需要把多行数据根据某一列的字段值转化为字段名的多行转一行的需求,或者把字段名转化为字段值的一行转多行的需求
有点拗口,且看两个实例:

需求一:字段值转化为字段名

将下表

转化成这样

方法一:利用str_to_map函数
 
select name
         ,info['语文'] as Chinese
         ,info['数学'] as Math
         ,info['英语'] as English
  from (select name,str_to_map(concat_ws(',',collect_set(concat_ws(':',subject,cast(score as string))))) as info
          from test
         group by name
             ) a 


 
方法二:利用case when函数 
select name
      ,max(case when subject = '语文' then score else 0 end) as Chinese
      ,max(case when subject = '数学' then score else 0 end) as Math
      ,max(case when subject = '英语' then score else 0 end) as English
  from test
 group by name

需求二:字段名转化为字段值


转化成

利用lateral view和explode:
select a.date
      ,b.label
      ,b.value
  from (select *
          from daily_report
           ) a 
     LATERAL VIEW explode (map(
             'UV', uv
             ,'新增UV', newuv 
             ,'视频存量', video
             ,'新增视频', newvideo
             ,'播放量', vv
             ,'会员数', vip_num
             ,'新增会员数', new_vip_num
               )) b as label, value

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/653789.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号