千家信息网

如何自定义hive永久函数

发表于:2025-01-24 作者:千家信息网编辑
千家信息网最后更新 2025年01月24日,这篇文章给大家分享的是有关如何自定义hive永久函数的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。需求原因:hive本身提供一个nvl的函数,但是该函数只对null值起作用
千家信息网最后更新 2025年01月24日如何自定义hive永久函数

这篇文章给大家分享的是有关如何自定义hive永久函数的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

需求原因:

hive本身提供一个nvl的函数,但是该函数只对null值起作用,现在的需求是不只是对null起作用,对""这样的空值也要起作用,所以需要自定义一个名叫nvls的函数,并集成到hive当中去。

具体步骤:

1:先写好java文件内容如下:

package org.apache.hadoop.hive.ql.udf;

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

import org.apache.hadoop.io.Text;

public class MyNvl extends UDF {

public Text evaluate(final Text t,final Text x) {

if(t!=null){

if(t.toString().equals("")){

return x;

}

}else{

return x;

}

return t;

}

}

2:测试:

2.1:先打成jar包名叫lixiyuan.jar,然后上传到服务器上。本人账户是zb_test。

Jar包放到/data/zb_test目录下。

然后进入hive

选测试的数据库:

Use test

然后添加jar包

Add jar /data/zb_test/lixiyuan.jar

然后创建函数

Create temporary function nvls as 'org.apahce.hadoop.hive.ql.udf.MyNvl';

然后就可以测试了

测试成功以后我们就要把集成到hive中去。

3:把函数集成到hive中去

先说一下添加永久函数的思路:首先hive里的函数是跟hive-exec-0.12.0-cdh6.0.0.jar个jar包有关的

具体的说就是我们要做两件事:

1:先修改环境变量vi ./.bashrc。内容修改为为如下:

把CLASSPATH改成如下:

export CLASSPATH=$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$SQOOP_HOME/lib:/opt/boh-2.0.0/hadoop/share/hadoop/tools/lib/*:/opt/boh-2.0.0/hadoop/share/hadoop/common/lib/*:/opt/boh-2.0.0/hadoop/share/hadoop/common/*:/opt/boh-2.0.0/hive/li

(为一行)

把刚刚写的java文件编译成class文件,然后添加到hive-exec-0.12.0-cdh6.0.0.jar解压后的udf目录下

2:修改hive-exec-0.12.0-cdh6.0.0.jar里的exec目录下的FunctionRegistry文件,但是我们解压出来的是都人家编译好的,所以得需要我们找到源码,找到FunctionRegistry.java文件后,往里面添加:

import org.apache.hadoop.hive.ql.udf.MyNvl;

registerUDF("nvls", MyNvl.class,false);

完成这两个步骤就可以了。

但是问题来了:

完成第一个步骤是简单的,完成第二个步骤就复杂一点了,因为咱们修改了FunctionRegistry.java文件后得编译成class文件以后才能用来替换原来的FunctionRegistry.class文件。所以现在解决的是怎么编译FunctionRegistry.java文件。

3:如何编译FunctionRegistry.java文件:

因为FunctionRegistry.java里面有:import org.apache.hadoop.hive.ql.udf.MyNvl;

registerUDF("nvls", MyNvl.class,false);这样的信息。

所以我们先把刚刚先新建这样的一个目录:

Org/apache/hadoop/hive/ql/udf然后往里面放MyNvl.class文件。

然后把这个org的目录打成jar包。名叫hello.jar

Jar -cvf /data/zb_test/hello.jar /data/zb_test/org/

接着,修改环境变量:

把CLASSPATH改成如下:

export CLASSPATH=/data/zb_test/hello.jar:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$SQOOP_HOME/lib:/opt/boh-2.0.0/hadoop/share/hadoop/tools/lib/*:/opt/boh-2.0.0/hadoop/share/hadoop/common/lib/*:/opt/boh-2.0.0/hadoop/share/hadoop/common/*:/opt/boh-2.0.0/hive/li

然后这样就可以编译FunctionRegistry.java文件了

Javac ./FunctionRegistry.java

然后用生成的FunctionRegistry.class文件替换原来的文件。然后重新把解压的东西打包成:

hive-exec-0.12.0-cdh6.0.0.jar替换hive里原来的就ok了。

感谢各位的阅读!关于"如何自定义hive永久函数"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

文件 函数 编译 目录 内容 步骤 测试 永久 作用 变量 更多 环境 篇文章 需求 有关 不错 复杂 实用 成功 一行 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 宝山区市场软件开发常见问题 软件开发学习哪个专业 山东新华网络安全 福州市智慧城市法人数据库 东莞地产软件开发联系方式 如何使用ncode材料数据库 煤矿监控软件的数据库数据滞后 服务器安全密码策略 氮氧化物数据库 数据库系统集成怎么做 数据库引擎支持什么 数据库查询优化的一般准则是什么 美帮帮互联网科技有限公司 尼尔机械纪元服务器管理者 新建数据库报错2058 电大数据库运维试卷 服务器隔离 安全 中信软件开发中心总经理 中小微企业网络安全政策 软件开发行业报价依据 苏州hpe塔式服务器价格 软件开发 微信支付面试 第七代无线网络技术 北京醋溜网络技术有限公司 关于网络安全公益讲座观后感 江苏电信用的飞龙软件开发 计算机网络技术职业技能考试 数据库重组说法正确的是 网状数据库使用树结构来描述关系 数据库的不安全因数
0