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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值