hive中的函数从大体上可以分为两类:hive内置函数和用户自定义函数
hive内置函数又可以根据输入输出细分为以下三类:
(1) 一进一出:
(2)多进一出(UDAF):如count()
(3)一进多出(UDTF):如explode(array<>)
用户自定义函数:也是包括三种UDF,UDAF,UDTF
(1)UDF:这里自定义一个脱敏函数为例;
UDF注意点:
a)自定义UDF需要继承org.apache.hadoop.hive.ql.UDF。
b)需要实现evaluate函数,evaluate函数支持重载。
操作步骤
a)把程序打包放到目标机器上去;
b)进入hive客户端,添加jar包:hive>add jar /run/jar/udf_test.jar;
c)创建临时函数:hive>CREATETEMPORARY FUNCTION add_example AS 'hive.udf.Add';
d)查询HQL语句:
e)销毁临时函数:hive> DROPTEMPORARY FUNCTION add_example;
自定义函数代码
自定义函数打jar包,上传到linux节点
添加jar 包到当前会话注册临时函数
注册临时函数使用自定义脱敏函数完成查询
查询结果(2):UDAF:
注意点:
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():返回最终的聚集函数结果
网友评论