栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

hive sql场景题第八部分详解

hive sql场景题第八部分详解

SQL的场景题分为八个小部分,每一个是5题。

36、需求如下:千锋好程序大数据学院

有用户表user(uid,name) 以及黑名单BanUser(uid)
1. 用left join 方式写sql查出所有不在黑名单的用户信息
2. 用not exists 方法写sql查询所有不在黑名单的用户信息
create table u( 
id string, 
name string 
)
row format delimited 
fields terminated by ',' 
;
​
create table banuser( 
id string 
);
​
load data local inpath '/hivedata/banuser.txt' overwrite into table banuser; 
load data local inpath '/hivedata/u.txt' overwrite into table u; 
分析:l
eft join 方式写sql查出所有不在黑名单的用户信息
​
select u.*,
from  u left join banuser on u.id = banuser.id
where banuser.id is null;
​
分析:2 
用not exists 方法写sql查询所有不在黑名单的用户信息
select u.*,
from u
where not exists(select 1 from banuser where banuser.id =u.id);
​

37、需求如下:

course_score表数据:

1,zhangsan,数学,80,2015
2,lisi,语文,90,2016
3,lisi,数学,70,2016
4,wangwu,化学,80,2017
5,zhangsan,语文,85,2015
6,zhangsan,化学,90,2015
create table course_score( 
id string, 
name string, 
course string, 
score int, 
year string 
)
row format delimited 
fields terminated by ',' 
;
​
load data local inpath './hivedata/course_score.txt' overwrite into table course_score; 

1、查出每个学期每门课程最高分记录(包含全部5个字段)

select id,name,course,score,year,max(score) over(partition by year,course)
from course_score;
​
select year,course,max(score)
from course_score
group by year,course order by year;

2、查出单个学期中语文课在90分以上的学生的数学成绩记录(包含全部字段)

select A.id,A.name,A.course,A.score,A.year
from course_score A join course_score B on A.name = B.name
where B.course='语文' and B.score>=90 and A.course='数学';

38、需求如下

t1表:

name course score 
aa English 75
bb math 85
aa math 90
​
create table t1_1(
name string,
course string,
score int
)
row format delimited
fields terminated by ' ';
​
load data local inpath './hivedata/t1_1.txt' overwrite into table t1_1;

使用hql输出以下结果

name English math 
aa 75 90 
bb 0 85
select name,
max(if(course="English",score,0)) English,
max(id(course="math",score,0)) math
from t1_1
froup by name;
​

39、需求如下千锋好程序大数据学院

t1表:

用户 商品 
A P1
B P1
A P2
B P3

请你使用hql变成如下结果:

用户 P1 P2 P3 
A 1 1 0
B 1 0 1
select username,
max(if(product='p1',1,0)) p1
max(if(product='p2',1,0)) p2
max(if(product='p3',1,0)) p3
from t1
group by username;

40、需求如下

dpt部门

dpt_id  dpt_name
1   产品
2   技术

User用户表

User_id Dpt_id
1   1
2   1
3   2
4   2
5   3

result表

user_id dpt_id  dpt_name
1   1   产品
2   1   产品
3   2   技术
4   2   技术
5   3   其他部门

原数据表时user和dpt表,请使用hql实现result表中的结果.

select user.user_id,user.dpt_id,dpt.dpt_id
from user
join dpt on user.dpt_id = dpt.dpt_id;

41、需求如下千锋好程序大数据学院

t1_order表:

order_id order_type order_time
111 N 10:00
111 A 10:05
111 B 10:10
​
create table t1_order(
order_id string,
order_type string,
order_time string
)
row format delimited
fields terminated by ' ';
​
load data local inpath './hivedata/t1_order.txt' overwrite into table t1_order;

是用hql获取结果如下:

order_id order_type_1 order_type_2 order_time_1 order_time_2 
111 N A 10:00 10:05
111 A B 10:05 10:10
select order_id,order_type_1,order_type_2,order_time_1,order_time_2
from(
select order_id,order_type order_type_1,
lead(order_type,1) over(sort by order_time) order_type_2,
order_time order_time_1,
lead(order_time,1) over(sort by order_time) order_time_2
from t1_order
)A
where order_type_2 is not null;

42、需求如下

t1_hobby表

name sex hobby 
janson 男 打乒乓球、游泳、看电影 
tom 男 打乒乓球、看电影
​
drop table t1_hobby;
create table t1_hobby(
name string,
sex string,
hobby string
)
row format delimited
fields terminated by ' ';
​
load data local inpath './hivedata/t1_hobby.txt' overwrite into table t1_hobby;

hobby最多3个值,使用hql实现结果如下:

name sex hobby1 hobby2 hobby3 
janson 男 打乒乓球 游泳 看电影 
tom 男 打乒乓球 看电影 
select name,sex,split(hobby,"、")[0] hobby1,
split(hobby,"、")[1] hobby2,
nvl(split(hobby,"、")[2],"") hobby3
from t1_hobby;

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/304608.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号