hive自定义函数function

文章介绍了如何在Hive中通过Java创建自定义函数,包括创建临时函数和永久函数的步骤。临时函数需要将Maven工程打包成jar,添加到Linux服务器,然后在Hive客户端通过`addjar`和`createtemporaryfunction`命令创建。永久函数则需要将jar上传到HDFS,使用`createfunction`命令创建,且影响范围限于当前库。文章还提到权限设置和函数使用示例。
摘要由CSDN通过智能技术生成

由于Hive内置的函数不能满足业务需求,我们可以利用Java编写

自定义函数步骤
1. 创建一个 Maven 工程,导入 hive-exec jar 依赖 org.apache.hive hive-exec 1.2.1
2. 创建自定义函数类
 自定义 UDF 函数,创建的类需继承 GenericUDF类,重写方法(org.apache.hadoop.hive.ql.udf.generic.GenericUDF)

3. 在 hive 的命令行窗口创建函数 

创建函数分为:创建临时函数 和 创建永久函数 两种。
创建函数命令如下:
        create [temporary] function [dbname.]function_name AS class_name;
删除函数命令如下:
        drop [temporary] function [if exists] [dbname.]function_name;

1)创建临时函数

1.将 maven 工程打包后的 jar,添加到 linux 服务器某个目录下
2.使用命令添加 jar,命令为:add jar 目录(jar所在linux目录)
3.创建function,命令:create temporary function 函数名 as 类路径(jar包中自定义函数的类路径)
4.通过命令:show functions可查看自己创建的函数。
5.提示:临时函数,在hive客户端关闭后失效,对 hive 中的全部数据库有效

2)创建永久函数

1.将 maven 工程打包后的 jar,上传到 hdfs 某个目录下(目录可自定义)
2.创建function,命令:create function ‘库名.函数名’ as ‘类路径’ using jar ‘jar包所在hdfs目录’
3.通过命令:show functions可查看自己创建的函数 (如果函数名不是【库名.函数名】格式,show functions是看不到的)。
4.提示:永久函数,只对当前所在库生效,其他库均不生效,所以建议使用【库名.函数名】命名方式。函数不会因为客户端的关闭而失效。
5.在 test 库下创建函数,名称为 test.split,在test 库下可直接 split() 方式使用。如需在 default 库下使用,则可通过加 test 前缀使用。

————————————————

一、临时函数

 临时函数定义: create temporary function 函数名 as '包名.类';

背景:给定一个经纬度,圈出以此坐标为圆心一定距离内的基站编码

1、步骤:

(1)必须导入两个jar包:hadoop-core-1.0.4.jar 和 hive-exec-0.13.1.jar;

(2)创建类必须继承UDF类;

(3)类必须重写evaluate方法;方法可以重载,根据自己的需求编写自己的方法。

(4)写好之后测试无误,打包成jar包,命名liujh _distance.jar。

2、将打包好的JAR包导入主机目录下

例如添加到 /data1/aaaa/test/shell 路径下

(1)在hive中添加包;

hive> add jar /data1/aaaa/test/shell /liujh_distance.jar;

Added /data1/aaaa/test/shell /liujh_distance.jar to class path 

(2)在hive中创建函数

hive> create temporary function liujh_distanceas as 'udffunc.LiujhUdfFunc';
OK
Time taken: 0.407 seconds

Liujh_distance是自己的函数名称,这个是自己定义的

udffunc.LiujhUdfFunc是函数在jar包中的路径 包名.类名 的方式

(3)查看函数

show functions like ‘%liujh_distance%’

(4)使用函数

hive> select liujh_distance(120.0001,30.001,120.110,30.110)from dual;
150.87

(5)删除函数

hive> Drop temporary function liujh_distance;

二、永久函数

定义:create function  函数名 as '包名.类名' using jar 'hdfs://ip:port/home/hive/jars/udf/xxx.jar';

1、编写函数的方法,下面方法是由java编写的

继承UDF类,然后去重写evaluate方法,

2、方法写完后进行验证是否符合自己的预期效果,如果符合把这个类打包为jar包,上传到服务器,然后通过hadoop fs -put 的方式上传到集群,

3、上传之后通过hadoop fs -chmod 777 去修改文件的权限,修改权限主要是为了让所有的用户都能使用这个永久函数,这个根据自己情况去修改。

例如:A用户去创建自定义函数(永久),文件上传到集群时,权限为700,那么这个永久函数只能是A用户去使用,同组下的B用户是不能调用这个函数的,会报如下错误,(invalid function 函数名)

4、修改完权限后,进入hive,执行命令(确保当前用户有admin权限)

set role admin;切换admin权限

show current roles;查看当前用户权限

create function  ① as '②' using jar '③';

①是代表方法名,②代表包名.类名,如cn.com.test,③代表jar包存放HDFS的路径.

create function add_prefix
as 'com.test.AddPrefix'
using jar 'hdfs:///wh/test/addPrefix.jar'

通过select add_prefix("参数");进行验证。(注意:如果role没设置正确,则该永久函数只能在创建永久函数的数据库下可用

小总结:

参考:

1)hive------------创建自定义函数(function)_hive create function_leson-xu的博客-CSDN博客

2)hive 创建自定义函数_hive create function_半截橡皮擦的博客-CSDN博客 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值