Hive行转列与列转行

1.hive中的行转列

行转列表示将数据进行合并
现有如下需求:
将下表中job和country都相同的任务进行合并。

name job country
赵云 武将
郭嘉 谋士
庞统 谋士
诸葛亮 谋士
张飞 武将

使用hive自带的UDAF函数 concat_ws和collect_set

Select  t1.base,concat_ws(‘|’,collect_set(t1.name)) from 
(Select name,concat(job,’|’,country) base from hero) as t1
Group by t1;

转换后的效果
在这里插入图片描述

2.hive中的列转行

列转行表示将数据进行拆分
现有如下需求:
将category中数据展开

movie category
《疑犯追踪》 悬疑,动作,科幻,剧情
《Lie to me》 悬疑,警匪,动作,心理,剧情
《战狼 2》 战争,动作,灾难

使用hive自带的UDTF函数explode(与lateral view 结合使用)

Select name,cate_name from 
	Movie lateral view explode(cate) tab_tmp as cate_name;

说明:其中对拆分的数据进行拆分需要保存在一张历史表中(tab_tmp),拆分后的列需要起一个别名(cate_name)。
转换后的效果:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_43695091/article/details/89052668