推荐:
题目部分
22 、使用hive 求出两个数据集的差集?
数据
t1表:
id name
1 zs
2 ls
t2表:
id name
1 zs
3 ww
结果如下:
id name
2 ls
3 ww
23
25 、每个用户连续登陆的最大天数?
数据:
login表
uid,date
1,2019-08-01
1,2019-08-02
1,2019-08-03
2,2019-08-01
2,2019-08-02
3,2019-08-01
3,2019-08-03
4,2019-07-28
4,2019-07-29
4,2019-08-01
4,2019-08-02
4,2019-08-03
结果如下:
uid cnt_days
1 3
2 2
3 1
4 3
32 、有如下三张表:
表A(登录表):
ds user_id
2019-08-06 1
2019-08-06 2
2019-08-06 3
2019-08-06 4
表B(阅读表):
ds user_id read_num
2019-08-06 1 2
2019-08-06 2 3
2019-08-06 3 6
表C(付费表):
ds user_id price
2019-08-06 1 55.6
2019-08-06 2 55.8
基于上述三张表,请使用hive的hql语句实现如下需求:
(1)、用户登录并且当天有个阅读的用户数,已经阅读书籍数量
(2)、用户登录并且阅读,但是没有付费的用户数
(3)、用户登录并且付费,付费用户书籍和金额
37 数据如下:
1,zhangsan,数学,80,2015
2,lisi,语文,90,2016
3,wangwu,化学,70,2017
4,zhangsan,语文,80,2015
5,zhangsan,化学,90,2015
6,lisi,语文,70,2015
答案部分
22
create table sql022t1
(
id string,
name string
)
row format delimited
fields terminated by '\t';
create table sql022t2
like sql022t1;
load data local inpath '/root/in/sql022t1' overwrite into table sql022t1;
load data local inpath '/root/in/sql022t2' overwrite into table sql022t2;
交集
select
t1.id,
t1.name,
t2.name
from
sql022t1 t1
join
sql022t2 t2
on
t1.id=t2.id;tt1
并集
select
id,
name
from
sql022t1
union
select
id,
name
from
sql022t2;tt2
差集=并集-交集
select
tt2.id,
tt2.name
from
(
select
t1.id id,
t1.name name,
t2.name name1
from
sql022t1 t1
join
sql022t2 t2
on
t1.id=t2.id
)tt1
right join
(select
id,
name
from
sql022t1 t1
union
select
id,
name
from
sql022t2)tt2
on
tt1.id=tt2.id
where
tt1.id is null;
23
123,dasfdasas,3,200,1535945356,