Hive 用户自定义函数(UDF)

一、定义

在Hive中,用户可以自定义一些函数用于扩展HiveQL的功能,这类函数叫作UDF (用 户自定义函数) 。

二、解释

Hive可以允许用户编写自己定义的函数UDF,来在查询中使用。Hive中有3种UDF:

UDF:操作单个数据行,产生单个数据行;

UDAF:操作多个数据行,产生一个数据行。

UDTF:操作一个数据行,产生多个数据行一个表作为输出。

org.apache.hadoop.hive.ql. exec.UDF, 基础的 UDF 函数读取和返 回基本类型,即 Hadoop 和 Hive 的基本类型, 如 Text、 IntWritable、 LongWritable、 DoubleWritable等。
org.apache.hadoop.hive.ql.udf.generic.GenericUDF, 复杂的 GenericUDF 可以处理 Map、 List、 Set 类型。

三、实例

3.1 导入相应的包

这里需要两个包:

hadoop-common.jar ---- 这个包应该在Hadoop 安装目录下面的, 我我这里是/opt/hadoop/share/hadoop/common/hadoop-common-3.1.2.jar
hive-exec-0.13.0.2.1.3.0-563.jar ,这个应该是在 hive /lib 目录下面

3.2 编写代码

新建了一个 项目,里面就一个Java文件,代码如下:

UUIDTest类要实现evaluate函数,获取随机字符串。
evaluate函数是可以有多个重载的。

@UDFType 这里有一个参数deterministic,是标识这个自定义函数是否是那种输入确定时输出就确定的函数,默认是true,比如length函数就是如果输入同一个值,那么输出肯定是一致的,
但是我们这里的UUID就算输入确定,但是输出也是不确定的,所以要将 deterministic设置为false。
@Describtion注解是可边的 ,用于对 函数进行说明,其中的一FUNC一字符串表示函数名 , 当使用 DESCRIBEFUNCTION命令时, 替换成函数名 。@Describtion包含三个属性:
name:用于指 定 Hive 中的函数名。
value:用于描述函 数的参数。
extended:额外的说明,例如当使用 DESCRIBE Fill叫CTION EXTENDED name 的时
候打印

package com;
 
import org.apache.hadoop.hive.ql.exec.UDF;
import org.apache.hadoop.hive.ql.udf.UDFType;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
 
@org.apache.hadoop.hive.ql.exec.Description(name = "UUID",
        extended = "示例:select UUID(32) from src;",
        value = "-生成一个指定长度的随机字符串(最长为36位)")
@UDFType(deterministic = false)
public class UUIDTest extends UDF {
 
    public Text evaluate(IntWritable leng) {
        String uuid = java.util.UUID.randomUUID().toString();
        int le = leng.get();
        le = le > uuid.length() ? uuid.length() : le;
        return new Text(uuid.substring(0, le));
    }
 
    /*
     生成一个随机字符串
    */
    public Text evaluate() {
        String uuid = java.util.UUID.randomUUID().toString();
        return new Text(uuid);
    }
}

3.3 打包

这里 就不介绍了,有人用的 eclipse ,用人用的idea ,只要打成 jar 包就行了。
我这边 打成了对应的jar,生成了一个uuid.jar
在这里插入图片描述

3.4 上传jar 、编译、打包成 jar 包并添加到 Hive 中

先把jar 上传到 /usr/local/hive/lib/ 目录下面

hive
add jar /usr/local/hive/lib/uuid.jar;
create temporary  function uuid as 'com.UUIDTest';

在这里插入图片描述

四、验证

执行对应的函数 ,如下:

select uuid() from load;

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一直打铁

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值