注意:
临时函数和永久函数的区别: 临时函数仅对当前session(黑窗口)有效。 永久函数是全局的。
hive创建临时函数
临时函数仅对当前session(黑窗口)有效。
添加jar包的两种方法
方法一: add jar /home/hadoop/lib/hive-1.0-SNAPSHOT.jar;
方法二: 在hive的文件夹下面创建auxlib文件夹,将jar包上传到auxlib文件夹下面,重启hive。
语法:CREATE TEMPORARY FUNCTION function_name AS class_name;
function_name函数名
class_name 类路径,包名+类名
示例:
-- 创建sayhello函数
create temporary function sayhello as 'com.ruozedata.bigdata.HelloUDF';
-- 查看函数列表
show functions like '*sayhello*';
-- 测试使用函数
select sayhello('zhang','san') from tableName ;
删除临时函数
语法:DROP TEMPORARY FUNCTION [IF EXISTS] function_name;
示例:
DROP TEMPORARY FUNCTION IF EXISTS sayhello;
Hive创建永久函数
创建永久函数
创建永久函数的语法:
CREATE FUNCTION [db_name.]function_name AS class_name
[USING JAR|FILE|ARCHIVE 'file_uri' [, JAR|FILE|ARCHIVE 'file_uri'] ];
file_uri:是hdfs上的jar包目录
添加jar包的两种方法
-- hdfs上的根目录下创建lib文件夹
hadoop fs -mkdir /lib
-- 将jar包上传到hdfs上的/lib 文件夹下
hadoop fs -put /home/hadoop/lib/hive-1.0-SNAPSHOT.jar /lib/
-- 查看jar
hadoop fs -lsr /lib
创建永久函数:
CREATE FUNCTION sayhello AS 'com.ruozedata.bigdata.HelloUDF' USING JAR 'hdfs://hadoop002:9000/lib/hive-1.0-SNAPSHOT.jar';
-- 查看函数列表
show functions like '*sayhello*';
default.sayhello函数创建成功。永久函数是已:库名.函数名的存在,同库使用的时候可以直接用函数名,不同库使用的时候需要带上库名
-- 测试函数
select sayhello("ruozedata") from dual ;
Impala创建持久化和非持久函数
impala udf java 函数使用
--创建函数(persistent 两种不能同时存在)
--非持久化
create function xxdb.null2num(string,int) returns string location '/user/mi/Null2Num.jar' symbol='org.ydd.hivetest.Null2Num';
--持久化
create function xxdb.null2num location '/user/mi/Null2Num.jar' symbol='org.ydd.hivetest.Null2Num';
--查询
select xxdb.null2num(c1, 10),count(1)
from xxdb.xxtbl
group by xxdb.null2num(c1, 10)
--删除函数
drop function xxdb.null2num(STRING,int)
--查询函数
use xxdb;
show functions;
-- 刷新元数据
refresh functions xxdb