自定义函数 Hive

自定义函数 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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值