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)。
转换后的效果: