hive 自定义函数UDF

本文介绍了Hive中的内置函数及其使用方法,并详细解释了如何通过自定义函数(UDF)扩展Hive的功能。提供了创建和使用自定义函数的具体步骤及示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 在Hive中给我们内置了很多函数

进入hive客户端,查看hive内置函数:

hive > show functions;

OK
!
!=
%
&
*
+
-
/
<
<=
<=>
<>
=
==
>
>=
^
abs
acos
add_months
and
array

...

 查看函数的具体方法:

hive> DESCRIBE FUNCTION case;
OK
CASE a WHEN b THEN c [WHEN d THEN e]* [ELSE f] END - When a = b, returns c; when a = d, return e; else return f

hive> DESCRIBE FUNCTION EXTENDED case;

hive> DESCRIBE FUNCTION EXTENDED case;
OK
CASE a WHEN b THEN c [WHEN d THEN e]* [ELSE f] END - When a = b, returns c; when a = d, return e; else return f
Example:
 SELECT
 CASE deptno
   WHEN 1 THEN Engineering
   WHEN 2 THEN Finance
   ELSE admin
 END,
 CASE zone
   WHEN 7 THEN Americas
   ELSE Asia-Pac
 END
 FROM emp_de
tails

2. hive函数除了内置还可以自定义

自定义函数开发UDF:
1. 使用maven创建一个java项目
2. 继承UDF类;
3. 重写evaluate方法

创建一个UrlDecodeWithChar类继承UDF,并且重写evaluate方法

import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import org.apache.hadoop.hive.ql.exec.UDF;
import org.apache.hadoop.io.Text;

public class UrlDecodeWithChar extends UDF{
    
    public Text evaluate(Text param, Text charset) {
        if (charset == null || charset.toString().length() == 0) {
            charset = new Text("UTF-8");
        }
        String decode = null;
        if (param == null) {
            return param;
        } else {
            String str = param.toString();
            try {
                decode = URLDecoder.decode(str, charset.toString());
            } catch (UnsupportedEncodingException e) {
                decode = param.toString();
            }
        }
        return new Text(decode);
    }
    
}

将写好的代码打成jar包.

创建临时函数时:

       1. 将jar包放在linux某个目录下,eg: /home/urldecode.jar

       2. 进入hive客户端,如下操作:

       a) add jar /home/urldecode.jar;

       b). create temporary function urldecode as 'com.jobs.main.UrlDecodeWithChar';

临时函数生成(只对当前session有效).

查询结果:

hive > select 'Bom',urldecode('%E5%B9%BF%E5%B7%9E%E5%B8%82%E7%BB%BF%E7%9B%88%E6%B1%BD%E8%BD%A6%E6%9C%8D%E5%8A%A1%E6%9C%89%E9%99%90%E5%85%AC%E5%8F%B8') from ls limit 2;

Bom     广州市绿盈汽车服务有限公司
Bom     广州市绿盈汽车服务有限公司

查看jar包

hive> list jar;

查看自定义函数

hive> show functons; 

删除自定义函数

hive> drop functon urldecode; 

生成永久函数

      1. 需要将jar包上传到hdfs上面

       eg: hdfs dfs -put /home/urldecode.jar /usr/lib

      2. 创建永久函数

       create function urldecode as 'com.jobs.main.UrlDecodeWithChar' using jar 'hdfs:///usr/lib';

注意:执行这条语句创建永久函数,show functiuons 会加上默认的数据库名在函数名前。(default.urldecode

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值