如何在Hive & Impala中使用UDF

如何在Hive & Impala中使用UDF

1、介绍如何在Hive、Impala中使用UDF函数

1.如何使用Java开发Hive的自定义函数(如果使用spark sql注册UDF函数,请参考之前的博客Hive Spark Api 查询、写入、注册UDF函数,SparkSql简单操作

2.如何在Hive中创建自定义函数及使用

3.如何在Impala中使用Hive的自定义函数

2.UDF函数开发

使用Intellij工具开发Hive的UDF函数,进行编译;

1.使用Intellij工具通过Maven创建一个Java工程,并添加依赖
在这里插入图片描述
2.Java示例代码如下

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

/**
 * @Auther: w 截取20180611 前四位(简单示例)
 * @Date: 2019/3/11 10:00
 * @Description:
 */
public class CutUdf extends UDF {

    public static String evaluate(String str) {

        if(null == str || str.length()==0){
            return "";
        }else{
            return str.substring(0,4);
        }
    }
}

此处使用一个简单的日期截取来做示例,注意此处需要集成UDF类,重写evaluate方法,来实现自己定义函数。

3.编译jar包

前提条件是已配置Maven的环境变量,命令行进入工程目录,执行如下命令:
mvn clean package
或者
直接在IDE maven 的插件里面进行打包
在这里插入图片描述

3.Hive使用自定义函数(UDF)

将章节2中编译好的sql-udf-demo-1.0.jar上传到集群服务器;

3.1创建临时UDF

1.进入Hive的shell命令行,执行如下命令,创建临时函数
add jar /var/lib/hadoop-hdfs/sql-udf-demo-1.0.jar;
create temporary function CutUdf as 'com.demo.hive.CutUdf';

在这里插入图片描述

2.在命令行测试该UDF函数

select CutUdf (yuqi_time), yuqi_time from marketing.sp_yuqi limit 10 ;
在这里插入图片描述

3.2创建永久UDF

1.在HDFS中创建相应目录,将sql-udf-demo-1.0.jar包上传至该目录

[hdfs@cdh21 ~]$ hadoop fs -mkdir /udf
[hdfs@cdh21 ~]$ hadoop fs -put sql-udf-demo-1.0.jar /udf

2.进入Hive的shell命令行,执行如下命令创建永久的UDF
create function CutUdf as 'com.demo.hive.CutUdf' using jar  'hdfs://cdh21:8020/udf/sql-udf-demo-1.0.jar';

注意:在创建的时候如果带有数据库名,则该UDF函数只对该库生效,其它库无法使用该UDF函数。
在命令行测试该函数是否可用,测试与上面一样

3.验证永久UDF函数是否生效

重新打开Hive CLI能正常使用创建的UDF函数。
在这里插入图片描述

4.Impala使用Hive的UDF

1.在Impala shell命令行执行元数据同步命令

invalidate metadata;

测试:
在这里插入图片描述
重新同步元数据之后再次进行测试:
在这里插入图片描述
注意,如果这边在第一个impala-shell进去的时候,同步元数据之后还是不能使用hive创建的UDF函数的话,关闭客户端连接,重新进入就可以使用了

删除UDF函数命令:drop function CutUdf;
且重启也生效

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值