掌握Hive函数[2]:从基础到高级应用
目录
高级聚合函数
多进一出
1. 普通聚合 count/sum...
2. collect_list 收集并形成list集合,结果不去重
3. collect_set 收集并形成set集合,结果去重
案例演示
1. 每个月的入职人数以及姓名
炸裂函数
概述
案例演示
1. 数据准备
1)表结构
2)建表语句
3)装载语句
2. 需求
1)需求说明
2)答案
高级聚合函数
多进一出
(多行传入,一个行输出)
1. 普通聚合 count/sum...
2. collect_list
收集并形成list集合,结果不去重
hive>
select
sex,
collect_list(job)
from
employee
group by
sex
结果:
女 ["行政","研发","行政","前台"]
男 ["销售","研发","销售","前台"]
3. collect_set
收集并形成set集合,结果去重
hive>
select
sex,
collect_set(job)
from
employee
group by
sex
结果:
女 ["行政","研发","前台"]
男 ["销售","研发","前台"]
案例演示
1. 每个月的入职人数以及姓名
hive>
select
month(replace(hiredate,'/','-')) as month,
count(*) as cn,
collect_list(name) as name_list
from
employee
group by
month(replace(hiredate,'/','-'))
结果:
month cn name_list
4 2 ["宋青书","周芷若"]
6 1 ["黄蓉"]
7 1 ["郭靖"]
8 2 ["张无忌","杨过"]
9 2 ["赵敏","小龙女"]
炸裂函数
概述
案例演示
1. 数据准备
1)表结构
movie | category |
---|---|
《疑犯追踪》 | 悬疑,动作,科幻,剧情 |
《Lie to me》 | 悬疑,警匪,动作,心理,剧情 |
《战狼2》 | 战争,动作,灾难 |
2)建表语句
hive (default)>
create table movie_info(
movie string, --电影名称
category string --电影分类
)
row format delimited fields terminated by "\t";
3)装载语句
insert overwrite table movie_info
values ("《疑犯追踪》", "悬疑,动作,科幻,剧情"),
("《Lie to me》", "悬疑,警匪,动作,心理,剧情"),
("《战狼2》", "战争,动作,灾难");
2. 需求
1)需求说明
根据上述电影信息表,统计各分类的电影数量,期望结果如下:
剧情 | 2 |
---|---|
动作 | 3 |
心理 | 1 |
悬疑 | 2 |
战争 | 1 |
灾难 | 1 |
科幻 | 1 |
警匪 | 1 |
2)答案
select
cate,
count(*)
from
(
select
movie,
cate
from
(
select
movie,
split(category, ',') cates
from movie_info
)t1 lateral view explode(cates) tmp as cate
)t2
group by cate;