Hive高级查询练习02

一、求每一年最大气温的那一天 + 温度

1、说明
数据格式
2010012325
2014010114
2014010216
2014010317
2014010410
2014010506
2012010609
2012010732
2012010812
2012010919
2012011023
2001010116
2001010212
2001010310
2001010411
2001010529
2013010619
2013010722
2013010812
2013010929
2013011023
2008010105
2008010216
2008010337
2008010414
2008010516
2007010619
2007010712
2007010812
2007010999
2007011023
2010010114
2010010216
2010010317
2010010410
2010010506
2015010649
2015010722
2015010812
2015010999
2015011023
数据解释
2010012325 表示在 2010 年 01 月 23 日的气温为 25 度。

建表、数据导入及拆分

create table tq(line STRING)
load data local inpath '/root/kb08/hive/homework/tq.txt' into table tq
create table ptq(datetime string,temp int) partitioned by(year int)
set hive.exec.dynamic.partition.mode=nonstrict
insert into ptq
partition(year)
select datetime,temp,year from vtq
select * from ptq

表清洗后结果(一部分)
在这里插入图片描述

查询语句

select * from ptq

select t.datetime,t.temp from
(
select datetime,temp,dense_rank() over(partition by year order by temp desc) dnk from ptq
)t

输出结果(一部分)
在这里插入图片描述

求每一年最大气温的那一天 + 温度

二、求学生选课情况

1、数据说明
(1)数据格式
id course
1,a
1,b
1,c
1,e
2,a
2,c
2,d
2,f
3,a
3,b
3,c
3,e
(2)字段含义
表示有 id 为 1,2,3 的学生选修了课程 a,b,c,d,e,f 中其中几门。
2、需求
编写 Hive 的 HQL 语句来实现以下结果:表中的 1 表示选修,表中的 0 表示
未选修输出结果格式如下
id a b c d e f
1 1 1 1 0 1 0
2 1 0 1 1 0 1
3 1 1 1 0 1 0

建表,数据导入

create table mycourse(stuid int,course string) row format delimited fields terminated by ','
load data local inpath '/root/kb08/hive/homework/course.txt' into table mycourse
select * from mycourse

查询语句

select stuid,concat_ws(',',collect_set(course)) courses from mycourse group by stuid

在这里插入图片描述

select stuid,
case when instr(courses,'a')>0 then 1 else 0 end a,
case when instr(courses,'b')>0 then 1 else 0 end b,
case when instr(courses,'c')>0 then 1 else 0 end c,
case when instr(courses,'d')>0 then 1 else 0 end d,
case when instr(courses,'e')>0 then 1 else 0 end e,
case when instr(courses,'f')>0 then 1 else 0 end f,
case when instr(courses,'g')>0 then 1 else 0 end g
from
(select stuid,concat_ws(',',collect_set(course)) courses from mycourse group by stuid)t

输出结果
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值