hive函数分为内置函数和自定义函数。
内置函数:
show functions; 查看函数
desc function; 查看用法
排名函数:(3种)
row_number():没有并列,相同名次按顺序排(同分不同名)
rank():有并列,相同名次空位
dense_rank():有并列,相同名次不空位
班级成绩排名前三的:
create table stu_score(
classId string,
userName string,
score int
)
row format delimited
fields terminated by ' '
;
load data local inpath '/usr/local/hivedata/score.dat' into table stu_score;
1、按班级分组,按照学生成绩倒序排列
row_number:
select *,
row_number() over(distribute by classId sort by score desc) rm,
rank() over(distribute by classId sort by score desc) rk,
dense_rank() over(distribute by classId sort by score desc) drk
from stu_score
;
取前三名:
select * from
(
select *,
row_number() over(distribute by classId sort by score desc) rm,
rank() over(distribute by classId sort by score desc) rk,
dense_rank() over(distribute by classId sort by score desc) drk
from stu_score
) tmp
where tmp.rm < 4
;
select * from
(
select *,
row_number() over(partition by classId order by score desc) rm,
rank() over(partition by classId order by score desc) rk,
dense_rank() over(partition by classId order by score desc) drk
from stu_score
) tmp
where tmp.rm < 4
;
over:开窗函数
patition只能用order by,不能用sort by
自定义函数:
为什么要有自定义函数:
hive的内部函数无法满足所有的业务需求,hive提供很多模块的自定义功能,比如:serde、自定义函数、输入输出格式等。
UDF:用户自定义函数,user defined function.一对一的输入输出(常用)
UDAF:用户自定义聚合函数。user defined aggregation function.多对一的输入输出。
UDTF:用户自定义表生成函数。user defined table-generate function.一对多的输入输出
编写UDF的方式:
1、继承UDF,重写evaluate(),允许重载。
2、继承genericUDF,重写initlizer()\getdisplay()\evaluate()
使用:
第一种用法:(只对当前session有效)
1.将编写好的UDF的jar包上传到服务器,并添加带hive的class path中
add jar /root/xxx.jar
add jar /root/gp1813Demo-1.0-SNAPSHOT.jar;
2.创建一个自定义的临时函数名
create temporary function myUDF as 'com.zk.xxxx';
3.测试
dual
create table dual (id string);
insert into dual valu