hive详解(函数)

本文详细介绍了Hive中的内置函数,包括排名函数row_number(), rank()和dense_rank(),并提供了使用示例。同时,文章探讨了自定义函数的原因和类型,如UDF、UDAF和UDTF。还详细讲解了如何编写和注册UDF,以及四种不同的使用方法,并通过案例展示了如何用UDF处理生日转年龄、解析日志和JSON数据等实际问题。" 100461895,9028309,Greenplum主备切换详解,"['数据库管理', 'Greenplum', '高可用架构', '数据安全', '故障恢复']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值