hive关于自定义函数以及创建自定义UDF函数

1、Hive 自带了一些函数,比如:max/min 等,但是数量有限,自己可以通过自定义 UDF 来方便的扩展。

2、当 Hive 提供的内置函数无法满足你的业务处理需要时,此时就可以考虑使用用户自定义。

3、根据用户自定义函数类别分为以下三种:

       这里的一是代表一行数据

      ①UDF(User-Defined-Function  一进一出

      ②UDAF(User-Defined Aggregation Function) 聚集函数,多进一出  类似于:count/max/min 

      ③UDTF(User-Defined Table-Generating Functions) 一进多出     如 lateral view explore()

4、官方文档地址

https://cwiki.apache.org/confluence/display/Hive/HivePlugins

5、步骤

      ①继承 org.apache.hadoop.hive.ql.UDF

      ②需要实现 evaluate 函数;evaluate 函数支持重载;

      ③将工程打包放到Linux,hive 的命令行窗口创建函数   添加 jar   

add jar linux_jar_path

      ④ 创建 function

create [temporary] function [dbname.]function_name AS class_name;

 这里temporary表示创建临时function,一旦关闭hive交互界面,就会没有,不加代表永久创建。

      ⑤hive 的命令行窗口删除函数

drop function functionname;

 6、注意事项

       UDF 必须要有返回类型,可以返回 null,但是返回类型不能为 void

 

自定义一个UDF函数

创建工程添加依赖


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

创建一个类

package com.fengrui;

import org.apache.hadoop.hive.ql.exec.UDF;


public class MyUDF extends UDF {

    public int evaluate (int data) {

        return data + 5;
    }

}

打成jar上传到服务器  /root/Jar_File/myhive/hive-1.0-SNAPSHOT.jar

将jar包添加到hive的classpath

hive (default)> add jar /root/Jar_File/myhive/hive-1.0-SNAPSHOT.jar;

创建临时函数与开发好的Javaclass关联

hive (default)> create temporary function add as 'com.fengrui.MyUDF';

测试

hive (default)> select *,add(id) res from join1;
join1.id        join1.name      join1.sex       join1.addr      res
1                  zhangsan        man            beijing        6
2                  lisi            woman          tianjin        7
3                  wangwu          man            shanghai       8
4                  AJ              woman          beijing        9
5                  jige            man            huhehaote     10
6                  fengrui         man            baotou        11

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值