hive中udf的开发

首先什么是UDF,UDF的全称为user-defined function,用户定义函数,为什么有它的存在呢?有的时候 你要写的查询无法轻松地使用Hive提供的内置函数来表示,通过写UDF,Hive就可以方便地插入用户写的处理代码并在查询中使用它们,相当于在HQL(Hive SQL)中自定义一些函数,首先UDF必须用java语言编写,Hive本身就是用java写的,sparksql中UDF的使用移步到这
编写UDF需要下面两个步骤:
1.继承org.apache.hadoop.hive.ql.UDF
2.实现evaluate函数,这个函数必须要有返回值,不能设置为void。同时建议使用mapreduce编程模型中的数据类型(Text,IntWritable等),因为hive语句会被转换为mapreduce任务。

pom添加依赖如下:

 <dependency>
            <groupId>org.apache.hive</groupId>
            <artifactId>hive-exec</artifactId>
            <version>1.2.1</version>
            <scope>provided</scope>
        </dependency>

我简单的写了一个demo,看代码吧:

package hive;

import org.apache.hadoop.hive.ql.exec.UDF;
import org.apache.hadoop.hive.ql.metadata.HiveException;
import org.apache.hadoop.io.Text;

/**
 * hive自定义函数,取多个字段的最小值;
 */
public class hiveUDF extends UDF {
    public Text evaluate(Text string){
        Text t ;
        String s = "helloworld"+string;
        t = new Text(s);
        return t;
    }
}

临时函数

1.首先我们将用java写好的UDF函数编译后的Java类打包成为一个JAR文件,并在Hive中注册这个文件(相当于告诉Hive这个是我写的UDF).
add jar /home/hdfs/xxx.jar;
2.创建方法(退出hive shell后将失效)
create temporary function jasontest as 'hive.hiveUDF';
然后就可以用这个自定义函数了,下面是查看的结果.

查看所有的函数:show functions like '*jason*';
删除某一个函数:drop temporary function jasontest;
删除jar包:delete jar /home/hdfs/structuredstreaming-1.0-SNAPSHOT.jar;
注意:这个函数在退出hive的时候,就不存在了,下次用的时候还需要在添加一遍.那我们如果想要一个永久的函数怎么办呢?

永久性函数

1,把jar包上传到hdfs的一个目录,例如:

hadoop dfs -put /test /hive/functions/

2,使用hdfs中的jar添加函数,在hive中具体使用如下:

create function ods.jason as '包名.类名' using jar '刚才上传到hdfs的jar包'

3,查看函数,跟上面操作步骤差不多,里面就不做演示了.

show functions 'ods.*'; 就能看到刚才注册的函数了,这次退出hive shell 再进来的时候函数不会删除.

如果有写的不对的地方,欢迎大家指正,如果有什么疑问,可以加QQ群:340297350,更多的Flink和spark的干货可以加入下面的星球

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

JasonLee实时计算

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

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

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

打赏作者

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

抵扣说明:

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

余额充值