2021-07-22-hive高级用法

substr函数用法
1. SUBSTR(str,pos,len): 从pos开始的位置,截取len个字符
eg:
substr(string ,1,3) :取string左边第1位置起,3字长的字符串。
所以结果为: str
substr(string, -1,3):取string右边第1位置起,3字长的字符串。显然右边第一位置起往右不够3字长。结果只能是: g
substr(string, -3,3):取string右边第3位置起,3字长的字符串。
结果为: ing

2. SUBSTR(str,pos): pos开始的位置,一直截取到最后
eg:
substr(string ,4) : 从右第4位置截取到最后
结果是: ing
Hive内置date函数:date_add用法
date_add('yyyy-MM-dd',n/-m)
返回初试日期n天后、m天前的日期
date_add(start_date, num_days) - Returns the date that is num_days after start_date

eg:
hive> select date_add('2019-06-24',5);
2019-06-29
hive> select date_add('2019-06-24',-2);
2019-06-22
hive-NVL函数
NVL函数的格式如下:NVL(expr1,expr2)
含义是:如果oracle第一个参数为空那么显示第二个参数的值,如果第一个参数的值不为空,则显示第一个参数本来的值。
SQL> select ename,NVL(comm, -1) from emp;
SMITH -1
ALLEN 300
WARD 500
JONES -1
MARTIN 1400
BLAKE -1
FORD -1
MILLER -1
其中显示-1的本来的值全部都是空值的

Hive中rank()、row_number()函数的用法

row_number() 会根据顺序计算 row_number()仅仅是加了序号
eg
需求:计算每门学科成绩排名
分析:按照学科分组,再按照成绩排序,使用partition by subject order by score

hive (default)> select name,subject,score,row_number() 
> over(partition by subject order by score desc) as rank from score;
OK
name	subject	score	rank
孙悟空	数学	95	1
猪八戒	数学	86	2
沙僧	数学	85	3
唐僧	数学	56	4
猪八戒	英语	84	1
唐僧	英语	84	2
沙僧	英语	78	3
孙悟空	英语	68	4
唐僧	语文	94	1
孙悟空	语文	87	2
沙僧	语文	65	3

rank() 可以显示相同的数据,下一名的排序+1,即为跳跃排序
hive (default)> select name,subject,score,rank() 
> over(partition by subject order by score desc) as rank from score;
OK
name	subject	score	rank
孙悟空	数学	95	1
猪八戒	数学	86	2
沙僧	数学	85	3
唐僧	数学	56	4
猪八戒	英语	84	1
唐僧	英语	84	1
沙僧	英语	78	3
孙悟空	英语	68	4
唐僧	语文	94	1
孙悟空	语文	87	2
沙僧	语文	65	3
猪八戒	语文	64	4


dense_rank(),即使有相同的数据,也会按照连续排序
hive (default)> select name,subject,score,dense_rank() 
> over(partition by subject order by score desc) as rank from score;
OK
name	subject	score	rank
孙悟空	数学	95	1
猪八戒	数学	86	2
沙僧	数学	85	3
唐僧	数学	56	4
猪八戒	英语	84	1
唐僧	英语	84	1
沙僧	英语	78	2
孙悟空	英语	68	3
唐僧	语文	94	1
孙悟空	语文	87	2
沙僧	语文	65	3
猪八戒	语文	64	4
over()
ver() 函数在Hive中运用广泛,通常搭配row_number() ,min(),max(),sum()来使用,总结下over函数划定窗口的范围
id	name	num
1	a	1
2	b	3
3	a	5
4	c	9
5	b	3

SELECT id,name,num,sum(num) over() sum1 from aa

2021-07-22-hive高级用法

SELECT id,name,num, sum(num) over(order by id) sum1 from aa

2021-07-22-hive高级用法

SELECT id,name,num, sum(num) over(partition by name) sum1 from aa

2021-07-22-hive高级用法

Hive中collect相关的函数有collect_list和collect_set。

2021-07-22-hive高级用法

select username, collect_list(video_name) from t_visit_video group by username ;
按用户分组,取出每个用户每天看过的所有视频的名字

2021-07-22-hive高级用法

SELECT time 时间, sum(case when score= "90" then 1 else 0 end) as 胜,sum(case when result = "负" then 1 else 0 end) as 负 from Student GROUP BY time;
when score= “90” : 为判断条件,
then 1 selse 0 end: 当以上判断条件成立,则为1; 而该语句是在sum中的,具有累加效果,即可实现对所有成绩为90分的人进行一个统计
from
上一篇:Pytorch分布式编程


下一篇:js实现el-tree树形数据转为扁平数据