系统自带的函数:
查看系统自带的函数:
hive> show functions;
显示自带函数的用法:
hive> desc function upper;
详细显示自带函数的用法:
hive> desc function extended upper;
用户自定义的函数UDF(user-defined function):
当Hive提供的内置函数无法满足你的业务处理需要时,此时就可以考虑使用用户自定义函数
根据用户自定义函数类别分为以下三种:
UDF(User-Defined-Function)
一进一出
UDAF(User-Defined Aggregation Function)
聚集函数,多进一出
类似于:count/max/min
UDTF(User-Defined Table-Generating Functions)
一进多出
如lateral view explore()
编程步骤:
继承org.apache.hadoop.hive.ql.UDF需要实现evaluate函数;evaluate函数支持重载在hive的命令行窗口创建函数 添加jar创建function 注意:UDF必须要有返回类型,可以返回null,但是返回类型不能为void。自定义UDF实例:
创建maven工程hive:
导入依赖
<dependencies> <!-- https://mvnrepository.com/artifact/org.apache.hive/hive-exec --> <dependency> <groupId>org.apache.hive</groupId> <artifactId>hive-exec</artifactId> <version>1.2.1</version> </dependency> </dependencies>编写UDF类:
import org.apache.hadoop.hive.ql.exec.UDF; /** * 继承hive包提供的UDF类,实现一个evaluate方法。 * 注意evaluate方法的返回值不能为void */ public class MyUDF extends UDF { /** * 随便写点小功能 */ public String evaluate(final String s){ if (s == null){ return s; } return s.toLowerCase(); } } 打成jar包,目标jar包在maven工程的target文件夹里可以看到。将jar包上传到linux中:
[kgg@hadoop202 software]$ ll hive-1.0-SNAPSHOT.jar -rw-rw-r--. 1 kgg kgg 1927 10ÔÂ 3 11:31 hive-1.0-SNAPSHOT.jarhive中添加jar包和classpath:
hive (mydb)> add jar /opt/software/hive-1.0-SNAPSHOT.jar; Added [/opt/software/hive-1.0-SNAPSHOT.jar] to class path Added resources: [/opt/software/hive-1.0-SNAPSHOT.jar]创建临时函数与开发好的java class关联:
hive (mydb)> create temporary function myudf as "udf.MyUDF"; OK Time taken: 0.03 seconds使用通过udf构建的函数:
hive (mydb)> select myudf('ADFASFSADF'); OK _c0 adfasfsadf Time taken: 1.628 seconds, Fetched: 1 row(s)成功。