自定义函数 Hive
Hive 中的函数分为 udf(user define function)
一进一出、udaf(user define aggregate function)
多进一出、udtf(user define table function)
一进多处
案例实操
第一步
编写自定义函数的 class
应该去继承 UDTF
或者 UDF
或者 UDAF
的接口然后实现对应的方法和操作的逻辑
实操
public class CompStrLen extends GenericUDF {
/**
* 初始化方法,检查数据个数、类型并返回函数的返回值的类型检查器
*
* @return 返回函数的返回值的类型检查器
*/
@Override
public ObjectInspector initialize(ObjectInspector[] objectInspectors) throws UDFArgumentException {
// 1:判断参数的个数
if (objectInspectors == null || objectInspectors.length != 1) {
throw new UDFArgumentException("args is must one but found more then one!");
}
// 2:判断参数的类型
for (ObjectInspector inspector : objectInspectors) {
ObjectInspector.Category category = inspector.getCategory();
if (category != ObjectInspector.Category.PRIMITIVE) {
throw new UDFArgumentTypeException(0, "args type can't parse!");
}
}
// 3:返回函数返回值的类型检查器
return PrimitiveObjectInspectorFactory.javaIntObjectInspector;
}
/**
* 核心代码
*
* @return 返回参数的长度
*/
@Override
public Object evaluate(DeferredObject[] deferredObjects) throws HiveException {
// 去除 null
for (DeferredObject deferredObject : deferredObjects) {
Object o = deferredObject.get();
if (o == null) return 0;
return String.valueOf(o).length();
}
return 0;
}
@Override
public String getDisplayString(String[] strings) {
return null;
}
}
第二步
导出 jar 包
导出 jar 包文件,在 hive 中添加 jar 文件,使用命令 add jar jar 包文件
添加 jar 包文件以后还要再 hive 中添加对应的 function,使用命令 create function [db_name.]function_name AS class_name
这样就可以使用了
补充点
删除 Hive 函数
如果函数不再使用的时候可以删除函数,使用以下命令即可 drop function if exists [db_name.]function_name