Hive提供了很多内建函数来满足您的计算需求,您也可以通过创建自定义函数(UDF)来满足不同的计算需求。UDF在使用上与普通的内建函数类似。本文为您介绍自定义函数的开发和使用流程。
背景信息
UDF分类如下表。
UDF分类 | 描述 |
---|---|
UDF(User Defined Scalar Function) | 自定义标量函数,通常称为UDF。其输入与输出是一对一的关系,即读入一行数据,写出一条输出值。 |
UDTF(User Defined Table-valued Function) | 自定义表值函数,用来解决一次函数调用输出多行数据场景的,也是唯一一个可以返回多个字段的自定义函数。 |
UDAF(User Defined Aggregation Function) | 自定义聚合函数,其输入与输出是多对一的关系,即将多条输入记录聚合成一条输出值,可以与SQL中的Group By语句联合使用。 |
开发UDF
- 使用IDE,创建Maven工程。工程基本信息如下,您可以自定义groupId和artifactId。
<groupId>org.example</groupId> <artifactId>hiveudf</artifactId> <version>1.0-SNAPSHOT</version>
- 添加pom依赖。
<dependency> <groupId>org.apache.hive</groupId> <artifactId>hive-exec</artifactId> <version>2.3.7</version> <exclusions> <exclusion> <groupId>org.pentaho</groupId> <artifactId>*</artifactId> </exclusion> </exclusions> </dependency>
- 创建一个类,继承Hive UDF类。类名您可以自定义,本文示例中类名为MyUDF。
package org.example; import org.apache.hadoop.hive.ql.exec.UDF; /** * Hello world! * */ public class MyUDF extends UDF { public String evaluate(final String s) { if (s == null) { return null; } return s + ":HelloWorld"; } }
- 将自定义的代码打成JAR包。在pom.xml所在目录,执行如下命令制作JAR包。
mvn clean package -DskipTests
target目录下会出现hiveudf-1.0-SNAPSHOT.jar的JAR包,即代表完成了UDF开发工作。
使用UDF
- 使用文件传输工具,上传生成的JAR包至集群root目录。本示例使用了文件传输工具(SSH Secure File Transfer Client)。
- 上传JAR包至HDFS。
- 创建UDF函数。
- 执行以下命令,使用UDF函数。该函数与内置函数使用方式一样,直接使用函数名称即可访问。
select myfunc("abc");
返回如下信息。OK abc:HelloWorld