一 创建临时函数
1、先要编写代码继承hive提供的类,并实现抽象方法后打包备用:
org.apache.hadoop.hive.ql.udf.generic.GenericUDF
org.apache.hadoop.hive.ql.udf.generic.GenericUDTF;
2、在hive命令行窗口创建函数
①添加jar依赖
add jar linux_jar_path;
②创建临时函数
create temporary function [dbname.]function_name AS class_name;
注意:临时函数只在当前会话窗口有效,关闭窗口或在另一个窗口临时函数都不会存在,在当前窗口内时可以在任意数据库中调用该临时函数
③删除临时函数(关闭当前会话窗口后会自动删除)
drop temporary function [if exists] [dbname.]function_name;
二 创建永久函数
与临时函数创建过程一样,在创建永久函数时,不加temporary
create function [dbname.]function_name AS class_name;
注意:创建永久函数如果不在函数名前指定数据库,则默认是当前数据库.函数名
此时在当前会话窗口能正常查到和运行,但是当在另一个窗口调用该函数时发现调用失败
原因:
add jar linux_jar_path;
用这个添加jar依赖是临时的,只在添加的会话窗口生效,如果要在另一个窗口调用该永久函数,需要重新再该窗口再一次引用该jar包依赖,不是很方便且过于繁杂
可以在创建永久函数时:
create function [dbname.]function_name AS class_name using jar hdfs_jar_path;
using此时就是永久生效的,但是此时需要的是在hdfs上的路径,所以需要将jar包放置在hdfs存储路径下才行,不然会报错。
还可以在hive目录下创建一个目录auxlib,将jar包放进去,并重启hive,这样就可以直接创建函数使用
mkdir auxlib