版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/yangguosb/article/details/83795489
UDF介绍
UDF,即用户自定义函数,本质就是插件。整体思路是:继承基类UDF,实现evaluate接口,指定类名即可。HIVE中UDF分为两类:临时函数和永久函数,函数类型的不同,具体操作过程略有差异。
临时函数
函数的生命周期与客户端的会话强绑定,会话关闭时函数被注销;
持久函数
函数的元信息被持久化到元数据,与客户端会话的生命相互独立;
UDF添加过程
Step1:编写Java实现类,并进行打包;
package com.example.hive.udf;
import org.apache.hadoop.hive.ql.exec.UDF;
import org.apache.hadoop.io.Text;
public final class Lower extends UDF {
public Text evaluate(final Text s) {
if (s == null) { return null; }
return new Text(s.toString().toLowerCase());
}
}
Step2:注册UDF,与实现类建立映射关系;
- 临时函数:首先,jar包添加到classpath; 然后执行CREATE命令注册函数,如下:
CREATE TEMPORARY FUNCTION function_name AS class_name;
- 持久函数:直接执行CREATE命令注册函数,如下:
CREATE FUNCTION [db_name.]function_name AS class_name
[USING JAR|FILE|ARCHIVE 'file_uri' [, JAR|FILE|ARCHIVE 'file_uri'] ];
说明:file_uri为jar包的存放路径,集群模式下使用HDFS路径;单机模式下,可以使用本地路径;
UDF删除过程
- 临时函数:关闭当前会话,或者使用DROP命令;
DROP TEMPORARY FUNCTION [IF EXISTS] function_name;
- 持久函数: 只能使用DROP命令;
DROP FUNCTION [IF EXISTS] function_name;
函数查看
- 查看所有所有函数:show functions;
- 查看某类函数:show functions like ‘*month*’;
- 查看某个函数的用法:desc function 函数名;
- 查看某个函数的详细用法:desc extended function 函数名;
参考: