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
2、建表语句
create table mian6( id int, name string, age int, favors string )row format delimited fields terminated by ",";
3、加载数据
load data local inpath "/home/hadoop/apps/mian6.txt" into table mian6;
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;
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;
查询结果如下:
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;
查询结果如下: