系统内置函数
-
查看系统自带的函数
show functions;
-
显示自带的函数的用法
desc function upper;
-
详细显示自带的函数的用法
desc function extended upper;
用户自定义函数类别分为以下三种:
- UDF(User-Defined-Function):返回对应值,一对一。操作作用于单个数据行,并且产生一个数据行作为输出。大多数函数都属于这一类(比如数学函数和字符串函数),比如:upper()、lowser()等。。
- UDAF(User-Defined Aggregation Function):返回聚类值,多对一。接受多个输入数据行,并产生一个输出数据行,比如:avg()、sum()等。
- UDTF (User-Defined Table-Generating Functions):返回拆分值,一对多。操作作用于单个数据行,并且产生多个数据行(采用表作为输出),比如:collect_set()、collect_list()等。 注意:
- UDF必须要有返回类型,可以返回null,但是返回类型不能为void
- UDTF函数有一些限制:
- 采用SELECT里面不能有其它字段
- 不能嵌套
- 不支持GROUP BY / CLUSTER BY / DISTRIBUTE BY / SORT BY
示例:自定义UDF函数
第一步:创建Maven项目,添加如下依赖:
org.apache.hive
hive-exec
3.1.2
第二步:继承org.apache.hadoop.hive.ql.UDF,编写自定义函数类
import org.apache.hadoop.hive.ql.exec.UDF;
public class Lower extends UDF {
public String evaluate (final String s) { //重写
if (s == null) {
return null;
}
return s.toLowerCase();
}
}
第三步:项目打包,然后将生成的jar文件上传Linux中,比如/usr/local/test 第四步:在Hive中,添加第三步中自定义函数所在的jar包
第五步:创建临时函数
语法: create temporary function 自定义函数名称 AS ‘自定义UDF的全类名’
第六步:在hive的命令行窗口执行自定义函数
第七步:销毁临时函数:
Drop [temporary] function [if exists] [dbname.]自定义函数名;