hive行转列星座血型案例分析和列转行电影类型数案例分析

hive行转列星座血型案例分析和列转行电影类型数案例分

又很多小伙伴对于行转列和列转行搞不清楚,接下来我就跟大家举个例子分析一下行转列和列转行的区别

我们可以简单这样理解一个表如果行多了就会变得很高,很瘦,如果列多了就会变得很矮很胖,

所谓行转列就是由瘦高转向矮胖横向发展会用到concat()拼接函数和collect()收集函数两个函数案例就是行转列,

而列和转行就是由矮胖转向瘦高纵向发展会用到explode()炸裂和 lateral view 函数

下面我将结合星座血型案例举例说明行转列

数据:
name constellation blood_type
孙悟空 白羊座 A
娜娜 射手座 A
宋宋 白羊座 B
猪八戒 白羊座 A
凤姐 射手座 A

需求:
把星座和血型一样的人归类到一起

答案:

select
    t1.base,
    concat_ws('|', collect_set(t1.name)) name
from
    (select
        name,
        concat(constellation, ",", blood_type) base
    from
        person) t1
group by
t1.base

表格实现:
射手座,A 娜娜|凤姐
白羊座,A 孙悟空|猪八戒
白羊座,B 宋宋

知识点:
1.利用concat()的参数一分隔符,这个函数,合并多个字符串
2.利用collect()的参数都是列名

下面我将结合电影类型案例举例说明列转行

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

需求
将电影分类中的数组数据展开。结果如下:
《疑犯追踪》 悬疑
《疑犯追踪》 动作
《疑犯追踪》 科幻
《疑犯追踪》 剧情
《Lie to me》 悬疑
《Lie to me》 警匪
《Lie to me》 动作
《Lie to me》 心理
《Lie to me》 剧情
《战狼2》 战争
《战狼2》 动作
《战狼2》 灾难

答案:
1.)将数据炸开用explode(装复杂数组的列名)函数炸裂!

select 
explode (category) 
from mov;

2.)用lateral view隐藏的拼接条件将炸开的数据连接(他自己会知道他自己是一行的)

select 
movie,ty  
from mov
lateral view explode(category) t as  ty;

表格实现
《疑犯追踪》 悬疑
《疑犯追踪》 动作
《疑犯追踪》 科幻
《疑犯追踪》 剧情
《Lie to me》 悬疑
《Lie to me》 警匪
《Lie to me》 动作
《Lie to me》 心理
《Lie to me》 剧情
《战狼2》 战争
《战狼2》 动作
《战狼2》 灾难

你可能感兴趣的:(大数据)