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

Hive sql 行转列

Hive sql 行转列

Hive sql 行转列

简单的行转列

业务场景:想统计不同商品的销量 进阶的行转列

业务场景:统计出不同商品的下单量

简单的行转列 业务场景:想统计不同商品的销量

原始订单数据:

order_id(订单id)order_info(订单商品)
10086牙刷,毛巾,水杯,牙膏

第一步先把每个订单里边的商品拆出来,也就是行转列,数据转换为下边的形式:

order_id(订单id)order_info(订单商品)
10086牙刷
10086毛巾
10086水杯
10086牙膏

直接贴代码:

select order_id
    ,order_info_split
from(
    select order_id
        ,order_info
    from table 
)a
lateral view explode(split(order_info,',')) b as order_info_split

这样就实现了行转列操作,同时可以根据需求,对转换出来的列数据进行二次处理。

进阶的行转列 业务场景:统计出不同商品的下单量

原始订单数据:

order_id(订单id)order_info(订单商品)
10086{“牙刷”: 1, “毛巾”: 2, “水杯”: 1, “牙膏”: 5}

目的是想统计该订单不同商品的下单件数,可以分为三步

第一步:仔细观察 order_info 里边的数据并不标准,比如 “牙刷”: 1,1前面对多了空格,需要处理为下边最后一列的形式

order_id(订单id)order_info(订单商品)order_info_replace
10086{“牙刷”: 1, “毛巾”: 2, “水杯”: 1, “牙膏”: 5}{“牙刷”:“1”, “毛巾”:“2”, “水杯”:“1”, “牙膏”:“5”}

代码处理:

select server
    ,role_id
    ,order_info
    ,str_to_map(regexp_replace(order_info,'\{|\}|\s|42',''),',',':') as order_info_replace
from table

第二步:先把每个订单里边的商品根据 key:value 拆出来,也就是行转列,数据转换为下边的形式

order_id(订单id)item_name(商品名)pay_num(下单数量)
10086牙刷1
10086毛巾2
10086水杯1
10086牙膏5

代码:

select order_id
    ,item_name
    ,pay_num
from(
    select server
    ,role_id
    ,order_info
    ,str_to_map(regexp_replace(order_info,'\{|\}|\s|42',''),',',':') as order_info_replace
    from table
)a 
LATERAL VIEW explode(npc_dict) b as item_name, item_name

第三步:根据分组聚合统计出不用商品的下单数量
这里就不细讲了,直接贴代码

select order_id
    ,item_name
    ,sum(pay_num) as total_pay_num
from(
    select order_id
        ,item_name
        ,pay_num
    from(
        select server
        ,role_id
        ,order_info
        ,str_to_map(regexp_replace(order_info,'\{|\}|\s|42',''),',',':') as order_info_replace
        from table
    )a 
    LATERAL VIEW explode(npc_dict) b as item_name, item_name
)b
group by order_id,item_name
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/774340.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

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

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