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

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

UDF函数开发

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

1.使用Intellij工具通过Maven创建一个Java工程,并添加pom.xml依赖

org.apache.hive

hive-exec

${hive.version}

2.Java示例代码如下

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

/**

* @Auther: 截取2018023 前五位(简单的udf对列的字符串处理)

* @Date: 2019/3/11 10:00

* @Description:

*/

public class SubStrUdf extends UDF {

public static String evaluate(String str) {

if(null == str || str.length()==0){

return "";

}else{

return str.substring(0,5);

}

}

}

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

3.编译jar包

前提条件是已配置Maven的环境变量,命令行进入工程目录,执行如下命令:

mvn clean package

或者

直接在IDE maven 的插件里面进行打包

clean

package

install

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

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

3.1创建临时UDF

1.进入Hive的shell命令行,执行如下命令,创建临时函数

hive> add jar /var/lib/hadoop-hdfs/sql-udf-demo-1.0.jar;

hive> create temporary function SubStrUdf as 'com.demo.hive.SubStrUdf';

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

hive> select SubStrUdf (send_erp_time), send_erp_time from erp_goods.order_goods limit 10 ;

hive会进行分布式的运算

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

hive> create function SubStrUdf as 'com.demo.hive.SubStrUdf' using jar 'hdfs://cdh21:8020/udf/sql-udf-demo-1.0.jar';

注意:在创建的时候如果带有数据库名,则该UDF函数只对该库生效,其它库无法使用该UDF函数。

在命令行测试该函数是否可用,测试与上面一样

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

重新打开Hive CLI能正常使用创建的UDF函数。

hive> select SubStrUdf (send_erp_time), send_erp_time from erp_goods.order_goods limit 10 ;

4.Impala使用Hive的UDF(直接使用hive中的java的jar文件中函数,同步元数据即可,可以直接复用哦)

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

impala> invalidate metadata;

测试:

重新同步元数据之后再次进行测试:

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

删除UDF函数命令:

impala> drop function SubStrUdf;

且重启也生效

hive 元数据 自定义_如何在Hive中创建自定义函数UDF及如何直接通过Impala的同步元数据重用UDF的jar文件-阿里云开发者社区...相关推荐

  1. wordpress 古腾堡_如何在WordPress中创建自定义古腾堡块(简便方法)

    wordpress 古腾堡 Do you want to create a custom Gutenberg block for your WordPress site? After the Word ...

  2. python django web典型模块开发实战_带你读《Python Django Web典型模块 开发实战》之一:从新浪微博聊起多端应用-阿里云开发者社区...

    Python Django Web典型模块 开发实战 点击查看第二章 点击查看第三章 寇雪松 编著 第1章 从新浪微博聊起多端应用 当人们听到"新浪",脑海里第一个浮现的关联词是& ...

  3. python读取hdf-eos5数据_《Python和HDF 5大数据应用》——2.4 你的第一个HDF5文件-阿里云开发者社区...

    本节书摘来自异步社区<Python和HDF 5大数据应用>一书中的第2章,第2.4节,作者[美]Andrew Collette(科莱特),胡世杰 译,更多章节内容可以访问云栖社区" ...

  4. sftp shell 批量上传文件_如何在shell脚本里使用sftp批量传送文件-阿里云开发者社区...

    主要步骤如下: 1.为运行shell脚本的本地用户生成密钥对 2.将其中的公钥分发到sftp欲登录的远程服务器上 3.编写并以上面的本地用户运行shell脚本 一.生成密钥对 在shell脚本中使用s ...

  5. c#如何wmf图片转换成png图片_【C#】使用fo-dicom完成BMP,JPG,PNG图片转换为DICOM文件-阿里云开发者社区...

    最近研究了一下DICOM和BMP文件转换的问题,也是很头大.度娘了很久,也在CSDN等论坛看到一些断断续续的文件,最主要的是代码只是片断,不是完整的实现.头大了. 首先,了解一下BMP文件格式,BMP ...

  6. halcon中面到面的距离_halcon学习笔记——(8)由标定板得到测量平面位姿-阿里云开发者社区...

    如图:由标定板位姿获取测量板位姿 1.pose_to_hom_mat3d( : : Pose : HomMat3D) 把三维位姿转化为齐次变换矩阵 2.hom_mat3d_translate_loca ...

  7. 如何在android中创建自定义对话框?

    本文翻译自:How to create a Custom Dialog box in android? I want to create a custom dialog box like below ...

  8. mysql double 存储_关于MYSQL中FLOAT和DOUBLE类型的存储-阿里云开发者社区

    关于MYSQL中FLOAT和DOUBLE类型的存储 重庆八怪 2016-04-12 844浏览量 简介: 关于MYSQL中FLOAT和DOUBLE类型的存储 其实在单精度和双精度浮点类型存储中其存储方 ...

  9. freebsd mysql 安装_Freebsd中mysql安装及使用笔记-阿里云开发者社区

    Freebsd中mysql安装及使用笔记 x3d 2009-07-31 662浏览量 简介: 1.安装 一开始连mysql的软件包在freebsd中叫什么都不知道: 依稀属于databases类,先到 ...

最新文章

  1. 车辆颜色识别学习笔记
  2. jdbc动态查询语句_Java修行第037天--JDBC技术
  3. 入门 | 32 个常用 Python 实现
  4. 使用 Git Extensions 简单入门 Git
  5. java字符流写入式乱码_字节流乱码与字符流乱码
  6. python3纵向输出字符串_python3字符串输出常见面试题总结
  7. 如果有轮回,又为何一定要抹去前世记忆?
  8. javascript:查找“跳号”号码
  9. 聊一聊使用airtest-selenium做Web自动化的常见问题
  10. python两数之和是多少_Python面试:两数之和
  11. Amazon 的IoT之路
  12. Qt qmake LIBS的使用指南
  13. 亚商策略会|闪马智能乘势“价值重构”,分享智慧城市建设新思路
  14. 我的计算机梦想作文,我的梦想作文600字
  15. Qt示例解析 【Callout】
  16. php创蓝253四要素认证_PHP短信接口分享:适用于创蓝253平台下的短信验证码、短信服务接口...
  17. 双下巴的瘦脸运动方法 - 生活至上,美容至尚!
  18. Windows系统搭建GitServer--Bonobo Git Server
  19. 手机汉字输入法欲立国家标准
  20. 快速幂算法的原理及实现

热门文章

  1. String类的equals()与==的区别
  2. Python中的lambda表达式与filter函数
  3. Linux下的less命令
  4. SpringBoot项目中获取yml文件的属性时实体属性类出现Spring Boot Configuration Annotation Processor not found in classpath
  5. c语言定义64位的变量,李洪强-C语言9-C语言的数据,变量和常量
  6. 全局声明宏定义_C++模拟面试:宏、lambda、智能指针闲谈
  7. python打包和添加数据文件_Python打包时添加非代码文件的坑
  8. init 0-6 这几个启动级别都代表什么意思
  9. Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.9
  10. Android开发笔记(一百五十七)使用OpenGL实现翻书动画