HIVE的自定义函数

Hive自定义函数包括三种UDF、UDAF、UDTF

UDF(User-Defined-Function) 一进一出

UDAF(User- Defined Aggregation Funcation) 聚集函数,多进一出。Count/max/min

UDTF(User-Defined Table-Generating Functions) 一进多出,如lateral view explore()

使用方式 :在HIVE会话中add 自定义函数的jar文件,然后创建function继而使用函数

UDF

1、UDF函数可以直接应用于select语句,对查询结构做格式化处理后,再输出内容。

2、编写UDF函数的时候需要注意一下几点:

a)自定义UDF需要继承org.apache.hadoop.hive.ql.UDF。

b)需要实现evaluate函数,evaluate函数支持重载。

例:写一个返回字符串长度的Demo:

复制代码
import org.apache.hadoop.hive.ql.exec.UDF;

public class GetLength extends UDF{
public int evaluate(String str) {
try{
return str.length();
}catch(Exception e){
return -1;
}
}
}
复制代码
3、步骤

a)把程序打包放到目标机器上去;

b)进入hive客户端,添加jar包:

hive> add jar /root/hive_udf.jar
  c)创建临时函数:

hive> create temporary function getLen as ‘com.raphael.len.GetLength’;
  d)查询HQL语句:

复制代码
hive> select getLen(info) from apachelog;
OK
60
29
87
102
69
60
67
79
66
Time taken: 0.072 seconds, Fetched: 9 row(s)
复制代码
  e)销毁临时函数:

hive> DROP TEMPORARY FUNCTION getLen;

UDAF

多行进一行出,如sum()、min(),用在group by时

1.必须继承

org.apache.hadoop.hive.ql.exec.UDAF(函数类继承)

org.apache.hadoop.hive.ql.exec.UDAFEvaluator(内部类Evaluator实现UDAFEvaluator接口)

2.Evaluator需要实现 init、iterate、terminatePartial、merge、terminate这几个函数

init():类似于构造函数,用于UDAF的初始化

iterate():接收传入的参数,并进行内部的轮转,返回boolean

terminatePartial():无参数,其为iterate函数轮转结束后,返回轮转数据,类似于hadoop的Combiner

merge():接收terminatePartial的返回结果,进行数据merge操作,其返回类型为boolean

terminate():返回最终的聚集函数结果

#开发一个功能同:

#Oracle的wm_concat()函数

#Mysql的group_concat()

UDAF 详细文档:http://www.cnblogs.com/ggjucheng/archive/2013/02/01/2888051.html

UDTF

UDTF 详细文档: http://www.cnblogs.com/ggjucheng/archive/2013/02/01/2888819.html

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值