对比mysql和hive:分组,取不同组前几条记录-explode函数的使用
【摘要】 1、数据源如下
id,name,age,favors(爱好)
1,huangxiaoming,45,a-c-d-f
2,huangzitao,36,b-c-d-e
3,huanglei,41,c-d-e
4,liushishi,22,a-d-e
5,liudehua,39,e-f-d
6,liuyifei,35,a-d-e
1234567
2、建表语句
creat...
1、数据源如下
id,name,age,favors(爱好)
1,huangxiaoming,45,a-c-d-f
2,huangzitao,36,b-c-d-e
3,huanglei,41,c-d-e
4,liushishi,22,a-d-e
5,liudehua,39,e-f-d
6,liuyifei,35,a-d-e
- 1
- 2
- 3
- 4
- 5
- 6
- 7
2、建表语句
create table mian6( id int, name string, age int, favors string
)row format delimited fields terminated by ",";
- 1
- 2
- 3
- 4
- 5
- 6
3、加载数据
load data local inpath "/home/hadoop/apps/mian6.txt" into table mian6;
- 1
4、需求如下
- 求出每种爱好中,年龄最大的两个人(爱好,年龄,姓名)
5、实现步骤如下
1)创建一个表mian6_1,存储使用explode炸裂favors后的结果。
create table mian6_1 as
select
m.id id,
m.name name,
m.age age,
m.favors favors,
tf.hobby hobby
from
mian6 m
lateral view explode(split(m.favors,"-")) tf as hobby;
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
explode炸裂favors后的结果如下:
2)查询出,每个兴趣内部的排名(每个兴趣内部,按照age降序排列)。
select
m.hobby,
m.name name,
m.age age,
m.favors favors,
row_number() over(partition by hobby order by age desc) index
from
mian6_1 m;
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
查询结果如下:
3)在第二步的基础上,挑选出每个兴趣内部,排名前二的2条记录。
select
a.hobby,
a.name,
a.age,
a.favors
from
(select m.name name,m.hobby hobby,m.age age,m.favors favors,
row_number() over(partition by hobby order by age desc) index
from mian6_1 m)a
where a.index<=2;
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
查询结果如下:
文章来源: blog.csdn.net,作者:数据分析与统计学之美,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/weixin_41261833/article/details/103479328
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)