UDF/UDTF/UDAF函数
UDF:一对一
- 开发udf程序:继承UDF类,实现一个或者多个evaluate方法
- 打成jar包
- 上传jar包到集群中,并添加到hive的环境变量中,在hive中执行
add jar /export/datas/udf.jar;
- 创建临时函数:
create temporary function transDate as 'bigdata.hanjiaxiaozhi.cn.hive.udf.UserUDF';
- 测试函数:
select transDate("18/Aug/2019:12:30:05");
- 删除临时函数
DROP TEMPORARY FUNCTION transDate;
UDTF:一对多
- 开发udtf程序:继承UDTF类,重写process方法
- 打成jar包
- 上传jar包到集群中,并添加到hive的环境变量中,在hive中执行
add jar /export/datas/udf.jar;
- 创建临时函数:
create temporary function transMap as 'bigdata.hanjiaxiaozhi.cn.hive.udtf.UserUDTF';
- 测试函数:
第一种用法:直接调用
select transMap("uuid=root&url=www.taobao.com") as (userCol1,userCol2);
第二种用法:和侧视图一起使用[常用][将UDTF的结果当做表使用]
select deptno,dname,a.*
from tb_dept
lateral view transMap("uuid=root&url=www.taobao.com") a as col1,col2;
`=> 视图 = 查询结果`
select deptno,deptname,a.* from dept,a;
注意:
- 自定义udtf只能直接select中使用
- 不可以添加其他字段使用
select "user",transMap("uuid=root&url=www.taobao.com") as (userCol1,userCol2);
- 不可以嵌套调用
select count(transMap(xxxxx))
- 不可以和group by/cluster by/distribute by/sort by一起使用
UDAF:多对一
- 开发udaf程序:继承UDAF类,重写iterate方法
- 打成jar包
- 上传jar包到集群中,并添加到hive的环境变量中,在hive中执行
add jar /export/datas/udf.jar;
- 创建临时函数:
create temporary function userMax as 'bigdata.hanjiaxiaozhi.cn.hive.udaf.UserUDAF';
- 测试函数:
select userMax(deptno) from tb_dept;
select userMax(cast(deptno as int)) from tb_dept;