在使用hive对一些日志数据进行解析或者分析的时候会有将行列进行转换的情形,我们将分别进行讨论。
一、行转列。
原始数据如下:
图一
需要转换成如下形式:
图二
即同一个品牌对应sku的分数按字典形式存储为dict字段。
需要用到函数concat_ws,collect_list,concat,代码如下:
select id ,user brand,
concat_ws(',',collect_list(concat(sku,':',score))) dict
from data_base.sku_score a
where ( user = 10000488 or user = 1000231 or user = 10004556)
group by id,user
二:列转行
即将图二还原成图一形式。
代码如下:
select id,brand,split(goods_id2,':')[0] sku,split(goods_id2,':')[1] score
from (select id,brand,goods_id2 from dmall_search.hive_test
lateral view explode(split(dict,','))goods as goods_id2 )a
关注微信公众号“H君聊人生”一起成长:
![](https://i-blog.csdnimg.cn/blog_migrate/50645256666666f60a0f41107e6a5678.jpeg)