当Hive提供的内置函数无法满足你的业务处理需要时,此时就可以考虑使用用户自定义函数(UDF:user-defined function)。
自定义函数类别
UDF 作用于单个数据行,产生一个数据行作为输出。(数学函数,字符串函数)
UDAF(用户定义聚集函数):接收多个输入数据行,并产生一个输出数据行。(count,max)
1)show functions;
2)select array(1,3,4);
3)select explode(array(1,2,3));
4)describe function split; 查看一个方法怎么使用
5)describe function extended split扩展帮助
1、在pom.xml中添加如下:
<!-- https://mvnrepository.com/artifact/org.apache.hive/hive-exec --><dependency>
<groupId>org.apache.hive</groupId>
<artifactId>hive-exec</artifactId>
<version>2.1.0</version>
</dependency>
2.、先开发一个java类,继承UDF,并重载evaluate方法
package hivedemo.udf;
import org.apache.hadoop.hive.ql.exec.Description;
import org.apache.hadoop.hive.ql.exec.UDF;
/**
* 自定义hive函数
*/
@Description(name = "myadd",
value = "myadd(int a , int b) ==> return a + b ",
extended = "Example:\n"
+ " myadd(1,1) ==> 2 \n"
+ " myadd(1,2,3) ==> 6;")
public class AddUDF extends UDF {
public int evaluate(int a ,int b) {
return a + b ;
}
public int evaluate(int a ,int b , int c) {
return a + b + c;
}
}
3、打成jar包上传到服务器
cmd>cd {classes所在目录}
cmd>jar cvf HiveDemo.jar -C x/x/x/x/classes/ .
4.将jar包添加到hive的classpath
//添加jar到类路径
$>cp /mnt/hgfs/downloads/bigdata/data/HiveDemo.jar /soft/hive/lib
3.重进入hive
$>....
5.创建临时函数与开发好的java class关联
CREATE TEMPORARY FUNCTION myadd AS 'hivedemo.udf.AddUDF';
6.即可在hql中使用自定义的函数myadd
$hive>select myadd(1,2) ;