在Hive中创建自定义函数主要分为以下步骤:
一、确定函数类型
UDF (User-Defined Function)
处理单行输入,返回单行输出,例如:字符串处理$f(x)=x^2$UDAF (User-Defined Aggregation Function)
处理多行输入,返回单行聚合结果,例如:$sum(x_i)$UDTF (User-Defined Table-Generating Function)
输入单行,返回多行输出(表结构)
二、编写Java实现类
需继承Hive API的基类:
// UDF示例:计算字符串长度 public class StringLengthUDF extends UDF { public int evaluate(String s) { return (s == null) ? 0 : s.length(); } }三、编译打包
- 添加Hive依赖(以Maven为例):
<dependency> <groupId>org.apache.hive</groupId> <artifactId>hive-exec</artifactId> <version>3.1.2</version> </dependency>- 打包JAR:
$mvn clean package$
四、部署到Hive
- 上传JAR文件到HDFS:
hdfs dfs -put my_udf.jar /lib- 在Hive会话中添加JAR:
ADD JAR hdfs:///lib/my_udf.jar;五、注册函数
CREATE FUNCTION str_length AS 'com.example.StringLengthUDF' USING JAR 'hdfs:///lib/my_udf.jar';六、使用自定义函数
SELECT str_length(name) FROM users;注意事项
向量化优化
对于UDF,可通过注解@Vectorized支持批量处理数据类型映射
Java类型需匹配Hive类型,例如:int→INTString→STRING
热加载
修改后需重新注册:$RELOAD FUNCTION;$
完整示例代码见:Hive UDF官方示例