Hive面试题思路总结(一)

几个hive面试题,总是写不上来,看过两遍还是不会,还是写不出来,进一步说明了,写代码真的需要很疯狂的写才可能比较熟悉。

 

不过好在,现在基本都有思路了,简单总结一下。

https://www.cnblogs.com/qingyunzong/p/8747656.html#_label0_0

 

这种题有了思路,把它形成套路,自然就熟能生巧了,但是光看懂思路真的写还是各种错误,所以说写出来才能真的信自己会了。

 

第一题

根据以下数据,求单月访问次数和总访问次数

单月访问次数很好求啊,就是用group by 用户名,月份   求和就可以了。然后把这些数据存在表B里。

总访问次数其实就是把本月之前的所有月份叠加嘛,把表B做自连接,然后通过a.month>=b.month条件,继续对访问次数求和即可。

用户名,月份,访问次数
A,2015-01,5
A,2015-01,15
B,2015-01,5
A,2015-01,8
B,2015-01,25
A,2015-01,5
A,2015-02,4
A,2015-02,6
B,2015-02,10
B,2015-02,5
A,2015-03,16
A,2015-03,22
B,2015-03,23
B,2015-03,10
B,2015-03,1

 

第二题,学生课程成绩

根据下表   求 所有数学课程成绩 大于 语文课程成绩的学生的学号

思路:我们都知道行与行是没办法比较的,需要转化成列。首先得有数学和语文这两列对吧,然后才能比较。

其实列名直接改都行,但是值怎么改,需要case when.....then....end。 把这组数据整理到一个view里。

create view tmp_course_view as
select sid, case course when "shuxue" then score else 0 end  as shuxue,  
case course when "yuwen" then score else 0 end  as yuwen from course;  

效果成这样了

接下来就简单了,把每个学生的每科成绩只留最大值,合并好。

然后比较成绩就可以了。

 

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

首先用substr来裁剪数据,分出year,month,day  标记为表A

求每年最大气温的温度,这个超级简单。

就把年、气温的最大值这两列抽出来就可以了,group by 年。标记为表B。

表A 表B做连接,以年相等、气温相等为条件做连接,这是哪一天  不就出来了么。

 

4. 学生选课情况

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

 

编写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    1

这个更简单,需要把a,b,c,d,e,f抽成一个集合。

再按照学生id,抽出一个集合,两个表做连接 一对照,有的标1,没得标0, 即可。

集合用到了collect_set(course)  这个倒是简单

array contains(整个集合,每个学生的成绩数组 第一个值就是a课程的成绩 第二个值就是b课程的成绩)

select id,
case when array_contains(id_courses, courses[0]) then 1 else 0 end as a,
case when array_contains(id_courses, courses[1]) then 1 else 0 end as b,

 

第五题更简单了 

和第一题完全一样。

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值