Hive函数(内置函数(字符串函数,数学函数,日期函数,集合函数,条件函数,聚合函数,表生成函数)和自定义函数(自定义函数创建流程,临时函数,永久函数)))(四)
Hive函数(内置函数和自定义函数)
- 一.内置函数
- 1.字符串函数
- (1)ascii
- (2)base64
- (3)concat
- (4)concat_ws
- (5)format_number
- (6)substr,substring
- (7)instr
- (8)length
- (9)locate
- (10)printf
- (11)str_to_map
- (13)unbase64
- (14)upper,ucase
- (15)lower,lcase
- (16)trim,ltrim,rtrim
- (17)regexp_replace
- (18)regexp_extract
- (19)parse_url
- (20)get_json_object
- (21)space
- (22)repeat
- (23)lpad
- (24)rpad
- (25)split
- (26)find_in_set—集合查找函数
- (27)sentences—分词函数
- (28)ngrams—词频
- (29)context_ngrams
- 2.类型转换函数
- (1)binary—二进制转换
- (2)cast—类型强转
- 3.数学函数
- (1)round
- (2)floor
- (3)ceil
- (4)rand
- (5)exp
- (6)ln
- (7)log10,log2,log
- (8)pow
- (9)sqrt
- (10)bin
- (11)hex
- (12)unhex
- (13)conv
- (14)abs
- (15)pmod
- 4.日期函数
- (1)unix_timestamp/ from_unixtime—**时间戳函数**
- (2)current_date—获取当前日期
- (3)to_date—日期时间转日期
- (4)获取日期中的年月/日/时/分/秒/周
- (5)datediff—日期之差
- (6)date_add/date_sub—日期增加和减少
- (7)其他日期函数
- 5.集合函数
- 6.条件函数
- (1)if函数
- (2)coalesce—非空查找函数
- (3)case—条件判断
- 7.聚合函数
- (1)sum—求和
- (2)count—求数据量
- (3)avg—平均值
- (4)distinct—去重
- (5)min—最小值
- (6)max—最大值
- 8.表生成函数
- (1)explode
- (2)json_tuple
- (3)parse_url_tuple
- (4)lateral view
- 二.自定义函数
- 1.自定义函数分类
- (1)UDF((User-Defined-Function)
- (2)UDAF(User-Defined Aggregation Function)
- (3)UDTF(User-Defined Table-Generating Functions)
- 2.自定义函数创建流程
- (1)编程步骤
- (2)实例
- (3)添加jar包的几种方法
- 3.自定义临时函数和自定义永久函数
- (1)临时函数
- (2)永久函数
一.内置函数
--显示hive下内置所有函数
show functions;
--查看函数的详细使用方法
desc function extended 函数名;
1.字符串函数
(1)ascii
语法:ascii(string str)
返回值:int
说明:返回字符串str第一个字符的ascii码
--示例
hive> select ascii("ba");
OK
98
(2)base64
语法:base64(binary bin)
返回值:string
说明:返回二进制bin的base编码字符串
hive> select base64(binary('test'));
OK
dGVzdA==
(3)concat
语法:concat(string A,string B)
返回值:string
说明:返回输入字符串连接后的结果,支持任意个输入字符串
hive> select concat('a','1','b');
OK
a1b
(4)concat_ws
语法: concat_ws(string SEP, string A, string B...)
返回值:string
说明:返回输入字符串连接后的结果,SEP 表示各个字符串间的分隔符
--数组转换成字符串
语法: concat_ws(string SEP, array<string>)
返回值: string
说明:返回将数组链接成字符串后的结果,SEP 表示各个字符串间的分隔符
hive> select concat_ws('---','a','1','b');
OK
a---1---b
--列转行
hive> select * from t3;
OK
A 1
A 2
A 3
A 4
B 2
B 5
B 1
hive> select item ,concat_ws(",",collect_list(nums)) as num from t3 group by item;
OK
A 1,2,3,4
B 2,5,1
hive> select concat_ws('|',array('a','b','c'));
OK
a|b|c
(5)format_number
语法: format_number(number x, int d)
返回值:string
说明::将数值 x 的小数位格式化成 d 位,四舍五入
hive> select format_number(5.23456,3);
OK
5.235
(6)substr,substring
从1开始数
语法: substr(string A, int start),substring(string A, int start)
返回值: string
说明:返回字符串 A 从 start 位置到结尾的字符串语法: substr(string A, int start, int len),substring(string A, intstart, int len)
返回值: string
说明:返回字符串 A 从 start 位置开始,长度为 len 的字符串
hive> select substr('abcde',3);
OK
cde
Time taken: 0.016 seconds, Fetched: 1 row(s)
hive> select substr('abcde',3,1);
OK
c
(7)instr
语法: instr(string str, string substr)
返回值: int
说明:返回字符串 substr 在 str 中首次出现的位置
hive> select instr('asdfs','f');
OK
4
hive> select instr('asdfs','fd');
OK
0
(8)length
语法: length(string A)
返回值: int
说明:返回字符串的长度
hive> select length('abn');
OK
3
(9)locate
语法: locate(string substr, string str[, int pos])
返回值: int
说明:返回字符串 substr 在 str 中从 pos 后查找,首次出现的位置
hive> select locate('a','abcba');
OK
1
hive> select locate('a','abcba',2);
OK
5
(10)printf
语法: printf(String format, Obj... args)
返回值: string
说明:将指定对象用 format 格式进行格式化
hive> select printf("%08x",123);
OK
0000007b
(11)str_to_map
语法: str_to_map(text[, delimiter1, delimiter2])
返回值: map<string,string>
说明:将字符串按照给定的分隔符转换成 map 结构.
hive> select str_to_map('k1:v1,k2:v2');
OK
{"k1":"v1","k2":"v2"}
hive> select str_to_map('k1=v1,k2=v2',',','=');
OK
{"k1":"v1","k2":"v2"}
(13)unbase64
语法: unbase64(string str)
返回值: binary
说明:将给定的 base64 字符串解码成二进制
hive> select unbase64('dGVzdA==');
OK
test
(14)upper,ucase
语法: upper(string A) ucase(string A)
返回值: string
说明:返回字符串 A 的大写格式
hive> select upper('djkFssFK');
OK
DJKFSSFK
hive> select ucase('djkFssFK');
OK
DJKFSSFK
(15)lower,lcase
语法: lower(string A) lcase(string A)
返回值: string
说明:返回字符串 A 的小写格式
hive> select lower('djkFssFK');
OK
djkfssfk
hive> select lcase('djkFssFK');
OK
djkfssfk
(16)trim,ltrim,rtrim
语法: trim(string A)
返回值: string
说明:去除字符串两边的空格语法: ltrim(string A)
返回值: string
说明:去除字符串左边的空格语法: rtrim(string A)
返回值: string
说明:去除字符串右边的空格
hive> select trim(' abc ');
OK
abc
hive> select ltrim(' abc ');
OK
abc
hive> select rtrim(' abc ');
OKabc
(17)regexp_replace
语法: regexp_replace(string A, string B, string C)
返回值: string
说明:将字符串 A 中的符合 java 正则表达式 B 的部分替换为 C。注意,在有些情况下要使用转义字符,类似 oracle 中的 regexp_replace 函数。
--将oo和ar替换成''
hive> select regexp_replace('foobar','oo|ar','');
OK
fb
(18)regexp_extract
语法: regexp_extract(string subject, string pattern, intindex)
返回值: string
说明:将字符串 subject 按照 pattern 正则表达式的规则拆分,返回 index 指定的字符。
hive> select regexp_extract('footbar','foo(.*?)(bar)',0);
OK
footbar
hive> select regexp_extract('footbar','foo(.*?)(bar)',1);
OK
t
hive> select regexp_extract('footbar','foo(.*?)(bar)',2);
OK
bar
(19)parse_url
语法: parse_url(string urlString, string partToExtract [, stringkeyToExtract])
返回值: string
说明:返回 URL 中指定的部分。partToExtract 的有效值为:HOST, PATH,QUERY,REF,PROTOCOL, AUTHORITY, FILE, and USERINFO.
hive> select parse_url('http://facebook.com/path1/p.php?k1=v1&k2=v2#Ref1','HOST');
OK
facebook.com
hive> select parse_url('http://facebook.com/path1/p.php?k1=v1&k2=v2#Ref1','QUERY','k1');
OK
v1
(20)get_json_object
语法: get_json_object(string json_string, string path)
返回值: string
说明:解析 json 的字符串 json_string,返回 path 指定的内容。如果输入的json 字符串无效,那么返回 NULL。
hive> select get_json_object('{"store":{"fruit":\[{"weight":8,"type":"apple"},{"weight":9,"type":"pear"}],"bicycle":{"price":19.95,"color":"red"} },"email":"amy@only_for_json_udf_test.net", "owner":"amy" } ','$.owner');
OK
amy
(21)space
语法: space(int n)
返回值: string
说明:返回长度为 n 的字符串
hive> select space(10);
OK
hive> select length(space(10));
OK
10
(22)repeat
语法: repeat(string str, int n)
返回值: string
说明:返回重复 n 次后的 str 字符串
hive> select repeat('abc',5);
OK
abcabcabcabcabc
(23)lpad
语法: lpad(string str, int len, string pad)
返回值: string
说明:将 str 进行用 pad 进行左补足到 len 位
--补足总长度为10
hive> select lpad('abc',10,'td');
OK
tdtdtdtabc
(24)rpad
语法: rpad(string str, int len, string pad)
返回值: string
说明:将 str 进行用 pad 进行右补足到 len 位
hive> select rpad('abc',10,'td');
OK
abctdtdtdt
Time taken: 0.026 seconds, Fetched: 1 row(s)
(25)split
语法: split(string str, string pat)
返回值: array
说明: 按照 pat 字符串分割 str,会返回分割后的字符串数组
hive> select split('adfsfdsts','s');
OK
["adf","fd","t",""]
(26)find_in_set—集合查找函数
语法: find_in_set(string str, string strList)
返回值: int
说明: 返回 str 在 strlist 第一次出现的位置,strlist 是用逗号分割的字符串。
如果没有找到该 str 字符,则返回 0
hive> select find_in_set('ab','ef,ab,de');
OK
2
(27)sentences—分词函数
语法: sentences(string str, string lang, string locale)
返回值: array<array<string>>
说明:返回输入 str 分词后的单词数组
hive> select sentences('hello world!hello hive,hi hive,hello hive');
OK
[["hello","world"],["hello","hive","hi","hive","hello","hive"]]
(28)ngrams—词频
语法: ngrams(array<array<string>>, int N, int K, int pf)
返回值: array<struct<string,double>>
说明:与 sentences()函数一起使用,分词后,统计分词结果中一起出现频次最高的 TOP-K 结果
hive>SELECT ngrams(sentences('hello word!hello hive,hi hive,hello hive'),2,2)
OK
[{"ngram":["hello","hive"],"estfrequency":2.0},{"ngram":["hive","hi"],"estfrequency":1.0}]
--该查询中,统计的是两个词在一起出现频次最高的 TOP-2;结果中,hello 与 hive 同时出现 2 次
(29)context_ngrams
语法: context_ngrams(array<array<string>>,array<string>, int K, int pf)
返回值: array<struct<string,double>>
说明:与 sentences()函数一起使用,分词后,统计分词结果中与数组中指定的单词一起出现(包括顺序)频次最高的 TOP-K 结果
hive> select context_ngrams(sentences('hello> word!hello> hive,hi> hive,hello> hive'),array('hello',null),3);
[{"ngram":["hive"],"estfrequency":2.0},{"ngram":["word"],"estfrequency":1.0}]
--该查询中,统计的是与’hello’一起出现,并且在 hello 后面的频次最高的TOP-3结果中,hello 与 hive 同时出现 2 次,hello 与 word 同时出现 1 次
2.类型转换函数
(1)binary—二进制转换
语法: binary(string|binary)
返回值: binary
说明: 将 string 类型转换为二进制
hive> select binary('charels');
OK
charels
(2)cast—类型强转
语法: cast(expr as )
返回值:
说明: 将 expr 转换成
hive> select cast('1' as DOUBLE);
OK
1.0
3.数学函数
(1)round
语法:round(DOUBLE a)
返回类型:DOUBLE
说明:返回数字 a 四舍五入后的值
语法:round(DOUBLE a, INT d)
返回类型:DOUBLE
说明:返回数字 a 四舍五入到小数点后 d 位的值
hive> select round(1.5);
OK
2.0
hive> select round(1.12, 4);
OK
1.12
hive> select round(1.12, -1);
OK
0.0
(2)floor
语法:floor(DOUBLE a)
返回类型:bigint
说明:对数字 a 向下取整
hive> select floor(1.1);
OK
1
hive> select floor(1.6);
OK
1
hive> select floor(-1.6);
OK
-2
hive> select floor(-1.1);
OK
-2
(3)ceil
语法:ceil(DOUBLE a), ceiling(DOUBLE a)
返回类型:bigint
说明:对数字 a 向上取整
hive> select ceil(-1.1);
OK
-1
hive> select ceil(-1.6);
OK
-1
hive> select ceil(1.6);
OK
2
hive> select ceil(1.1);
OK
2
(4)rand
语法:rand(), rand(INT seed)
返回类型:double
说明:如果 seed 不指定,则返回 0 到 1 之间的随机数
hive> select rand();
OK
0.5912090525580687
hive> select rand(2);
OK
0.7311469360199058
(5)exp
语法:exp(DOUBLE a), exp(DECIMAL a)
返回类型:double
说明:返回 e 的 a 次方
hive> select exp(2);
OK
7.38905609893065
(6)ln
语法:ln(DOUBLE a), ln(DECIMAL a)
返回类型:double
说明:返回以 e 为底,a 的对数
hive> select ln(0.0);
OK
NULL
Time taken: 0.015 seconds, Fetched: 1 row(s)
hive> select ln(1);
OK
0.0
(7)log10,log2,log
语法:log10(DOUBLE a), log10(DECIMAL a)
返回类型:double
说明:返回以 10 为底,a 的对数语法:log2(DOUBLE a), log2(DECIMAL a)
返回类型:double
说明:返回以 2 为底,a 的对数语法:log(DOUBLE base, DOUBLE a),log(DECIMAL base, DECIMAL a)
返回类型:double
说明:返回以 base 为底,a 的对数
hive> select log10(10);
OK
1.0
hive> select log2(10);
OK
3.3219280948873626
hive> select log(2,4);
OK
2.0
(8)pow
语法:pow(DOUBLE a, DOUBLE p), power(DOUBLE a, DOUBLE p)
返回类型:double
说明:返回 a 的 p 次方
hive> select pow(2,4);
OK
16.0
(9)sqrt
语法:sqrt(DOUBLE a), sqrt(DECIMAL a)
返回类型:double
说明:返回 a 的 平方根
hive> select sqrt(4);
OK
2.0
(10)bin
语法::bin(BIGINT a)
返回类型:STRING
说明:返回 a 的 二进制表达式
hive> select bin(-8);
OK
1111111111111111111111111111111111111111111111111111111111111000
(11)hex
语法::hex(BIGINT a) hex(STRING a) hex(BINARY a)
返回类型:STRING
说明:如果参数 a 是整数,则返回十六进制表达式;如果参数 a 是字符串,则逐一将字符串中的每个字符对应的 ASCII 码以十六进制表示并返回,
hive> select hex(16);
OK
10
hive> select hex(-1);
OK
FFFFFFFFFFFFFFFF
(12)unhex
语法:unhex(STRING a)
返回类型:STRING
说明:hex 的逆函数,以十六进制解释参数 a ,并进行 ASCII 转换,返回对应的字符
hive> select unhex('41');
OK
A
(13)conv
语法:conv(BIGINT num, INT from_base, INT to_base), conv(STRING num,
INT from_base, INT to_base)
返回类型:STRING
说明:将数字 num 或者字符串 num 从 from_base 进制转换到 to_base 进制
hive> select conv(10000000000,2,10);
OK
1024
hive> select conv('1024', 10, 2);
OK
10000000000
(14)abs
语法:abs(DOUBLE a)
返回类型:DOUBLE
说明:返回 a 的绝对值
hive> select abs('-1212');
OK
1212.0
(15)pmod
语法:pmod(INT a, INT b), pmod(DOUBLE a, DOUBLE b)
返回类型:INT or DOUBLE
说明:返回 a 模 b 的值,pmod(a, b) 同 a % b
hive> select pmod(10,3);
OK
1
4.日期函数
(1)unix_timestamp/ from_unixtime—时间戳函数
--unix_timestamp日期转时间戳:从 1970-01-01 00:00:00 UTC 到指定时间的秒数
--from_unixtime时间戳转日期
hive> select unix_timestamp('20170915 14:23:00','yyyyMMdd HH:mm:ss');
OK
1505456580
hive> select from_unixtime(unix_timestamp(),'yyyy-MM-dd HH:mm:ss'); --获取系统当前时间
unix_timestamp(void) is deprecated. Use current_timestamp instead.
OK
2020-12-17 17:32:31
(2)current_date—获取当前日期
hive> select current_date;
OK
2020-12-17
(3)to_date—日期时间转日期
hive> select to_date('2017-09-15 11:12:00');
OK
2017-09-15
(4)获取日期中的年月/日/时/分/秒/周
hive> with dtime as(select from_unixtime(unix_timestamp(),'yyyy-MM-dd HH:mm:ss')> as dt)> select> year(dt),month(dt),day(dt),hour(dt),minute(dt),second(dt),weekofyear(dt)> from dtime;
unix_timestamp(void) is deprecated. Use current_timestamp instead.
OK
2020 12 17 17 36 11 51
(5)datediff—日期之差
hive> select datediff('2017-09-15','2017-09-01');
OK
14
(6)date_add/date_sub—日期增加和减少
hive> select date_add('2020-12-17',12);
OK
2020-12-29hive> select date_sub('2020-12-17',12);
OK
2020-12-05
(7)其他日期函数
--查询当前系统时间(包括毫秒数)hive> select current_timestamp;
OK
2020-12-17 17:39:47.868
--查询当月第几天
hive> select dayofmonth(current_date);
OK
17
--本月最后一天
hive> select last_day(current_date);
OK
2020-12-31
--本月第一天
hive> select date_sub(current_date,dayofmonth(current_date)-1);
OK
2020-12-01
Time taken: 0.033 seconds, Fetched: 1 row(s)
--下个月第一天
hive> select add_months(date_sub(current_date,dayofmonth(current_date)-1),1);
OK
2021-01-01
5.集合函数
返回值 | 函数 | 描述 |
---|---|---|
int | size(Map<K.V>) | 返回 map 中键值对个数 |
int | size(Array<T>) | 返回数组的元素数量 |
array<K> | map_keys(Map<K.V>) | 返回 map 中的所有 key |
array<V> | map_values(Map<K.V>) | 返回 map 中的所有 value |
boolean | array_contains(Array<T>, value) | 如该数组 Array包含 value 返回 true。否则返回 false |
array | sort_array(Array<T>) | 对数组进行排序 |
6.条件函数
(1)if函数
语法: if(boolean testCondition, T valueTrue, T valueFalseOrNull)
返回值: T
说明: 当条件 testCondition 为 TRUE 时,返回 valueTrue;否则返回valueFalseOrNull
hive> select if(1=2,100,200);
OK
200
(2)coalesce—非空查找函数
语法: COALESCE(T v1, T v2, …)
返回值: T
说明: 返回参数中的第一个非空值;如果所有值都为 NULL,那么返回 NULL
hive> select COALESCE(null,'100','50');
OK
100
(3)case—条件判断
语法: CASE a WHEN b THEN c [WHEN d THEN e]* [ELSE f] END
返回值: T
说明:如果 a 等于 b,那么返回 c;如果 a 等于 d,那么返回 e;否则返回 f语法: CASE WHEN a THEN b [WHEN c THEN d]* [ELSE e] END
返回值: T
说明:如果 a 为 TRUE,则返回 b;如果 c 为 TRUE,则返回 d;否则返回 e
hive> select case 100 when 50 then 'tom'> when 100 then 'mary'> else 'tim'> end;
OK
mary
hive> select case when 1=2 then 'tom'> when 2=2 then 'mary'> else 'tim'> end> ;
OK
mary
7.聚合函数
(1)sum—求和
(2)count—求数据量
(3)avg—平均值
(4)distinct—去重
(5)min—最小值
(6)max—最大值
8.表生成函数
(1)explode
语法:explode(ARRAY)
说明:返回 n 行,每行对应数组中的一个元素
语法:explode(MAP)
说明:返回 n 行两列,每行对应每个 map 键-值,第一列是 map 的键,第二列是
map 的值。(不常用)
hive> select explode(array(1,2,3,4));
OK
1
2
3
4
hive> select explode(map(1,2,3,4));
OK
1 2
3 4
(2)json_tuple
语法:json_tuple(jsonStr, k1, k2, …)
说明:从一个 JSON 字符串中获取多个 key 对应的 value 并作为一个元组返回。
(3)parse_url_tuple
语法:parse_url_tuple(url, p1, p2, …)
说明:返回从 URL 中抽取指定 N 部分的内容并作为一个元组返回,参数 url 是 URL字符串,而参数 p1,p2,…是要抽取的部分
(4)lateral view
udtf有一个很大的限制,在使用 UDTF 时,select 后面只能跟 UDTF,不能跟其他任何字段,否则会报错
hive> select 1,explode(array(1,2,3,4));
FAILED: SemanticException [Error 10081]: UDTF's are not supported outside the SELECT clause, nor nested in expressions
lateral view 就是为了解决在 select 使用 UDTF 做查询过程中,查询只能包含单个 UDTF,不能包含其他字段、以及多个 UDTF 的问题。
lateral view 会将 UDTF 拆分成多行的结果放到一个支持别名的虚拟表中,然后这个虚拟表会和输入行进行 join 来达到连接 UDTF 外的 select 字段的目的。
select uid,name,
tmp.c
from course
lateral view explode(kc) tmp as c;
二.自定义函数
当 Hive 提供的内置函数无法满足你的业务处理需要时,此时就可以考虑使用用户自定义函数(UDF:user-defined function)。
1.自定义函数分类
(1)UDF((User-Defined-Function)
一进一出
(2)UDAF(User-Defined Aggregation Function)
多进一出,类似于:count/max/min
(3)UDTF(User-Defined Table-Generating Functions)
一进多出,如lateral view explore()
2.自定义函数创建流程
编写一个 UDF,需要继承 UDF 并实现 evaluate()函数。在查询过程中,查询中对应的每个应用到这个函数的地方都会对这个类进行实例化。对于每行输入都会调用 evaluate()函数。而 evaluate()处理后的值会返回给 Hive。同时用户是可以重载 evaluate 方法的。Hive 会像 Java 的方法重载一样,自动选择匹配的方法。
(1)编程步骤
1)继承org.apache.hadoop.hive.ql.UDF
2)需要实现 evaluate 函数;evaluate 函数支持重载;
3)在 hive 的命令行窗口创建函数
- 添加jar
add jar linux_jar_path
- 创建function
create [temporary] function [dbname.]function_name AS class_name;
4)调用函数
注意:UDF 必须要有返回类型,可以返回 null,但是返回类型不能为 void;
(2)实例
1)创建一个 maven 项目,添加依赖
<dependencies><dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-common</artifactId><version>2.6.0-cdh5.14.2</version></dependency><dependency><groupId>org.apache.hive</groupId><artifactId>hive-exec</artifactId><version>1.1.0-cdh5.14.2</version></dependency></dependencies>
添加打包插件
<build><plugins><plugin><artifactId>maven-compiler-plugin</artifactId><version>3.3</version><configuration><source>1.8</source><target>1.8</target></configuration></plugin><plugin><artifactId>maven-assembly-plugin</artifactId><executions><execution><phase>package</phase><goals><goal>single</goal></goals></execution></executions><configuration><descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef></descriptorRefs></configuration></plugin></plugins>
</build>
2)创建一个类
package cn.kgc.udf;
import org.apache.hadoop.hive.ql.exec.UDF;
public class Str2Lower extends UDF {public Text evaluate(Text s){if (s==null){return null;}return new Text(s.toString().toLowerCase());} }
3)打成 jar 包上传到服务器/opt/jars/udf.jar
4)将 jar 包添加到 hive 的 classpath
hive (default)> add jar /opt/jars/udf.jar;
5)创建临时函数与开发好的 java class 关联
hive (default)> create temporary function my_lower as "cn.kgc.udf.Str2Lower";
6)可在 hql 中使用自定义的函数 strip
hive (default)> select ename, my_lower(ename) lowername from emp;
(3)添加jar包的几种方法
1)方法一:使用 add jar 命令
在 hive 下执行:add jar /home/hadoop/DefTextInputFormat.jar;
Added [/home/hdfs/DefTextInputFormat.jar] to class path
Added resources: [/home/hdfs/DefTextInputFormat.jar]
该方法每次启动 Hive 的时候都要重新加入,退出 hive 就会失效。
2)hive-site.xml 文件配置 hive.aux.jars.path
<property>
<name>hive.aux.jars.path</name>
<value>file:///home/hadoop/DefTextInputFormat.jar,file:///jarpath/test.jar</value>
</property>
3)方法三:根目录${HIVE_HOME}下创建文件夹 auxlib,然后将自定义 jar文件放入该文件夹中;
3.自定义临时函数和自定义永久函数
(1)临时函数
仅对当前session(黑窗口)有效,一旦退出 HIVE 客户端,自定义临时函数即被删除
--添加 jar 包
hive> add jar /opt/datas/addPrefix.jar;
--创建自定义临时函数
hive> create temporary function add_prefix as 'com.test.AddPrefix';
--使用自定义临时函数
hive> select add_prefix('aa');
HIVE UDF Prefix:aa
(2)永久函数
如果需要使用自定义永久函数,可以先上传到 HDFS
[root@hadoop101 ~]# hadoop fs -put addPrefix.jar /opt/datas
--创建永久函数
hive > create function add_prefix as 'com.test.AddPrefix'
using jar 'hdfs:///opt/datas/addPrefix.jar'
--与自定义临时函数不同,使用永久函数只能在当前数据库
--这里我们放在 test 库,如果在其它库执行,会报错
hive (test)> select add_prefix('aa');
HIVE UDF Prefix:aa
hive> use tmp;
hive (tmp)> select add_prefix('aa');
FAILED: SemanticException [Error 10011]: Invalid function add_prefix
--删除自定义永久函数
hive (test)> drop function add_prefix;
Hive函数(内置函数(字符串函数,数学函数,日期函数,集合函数,条件函数,聚合函数,表生成函数)和自定义函数(自定义函数创建流程,临时函数,永久函数)))(四)相关推荐
- 2021年大数据Hive(五):Hive的内置函数(数学、字符串、日期、条件、转换、行转列)
全网最详细的Hive文章系列,强烈建议收藏加关注! 后面更新文章都会列出历史文章目录,帮助大家回顾知识重点. 目录 系列历史文章 前言 Hive的内置函数 一.数学函数 1. 取整函数: round ...
- [Hive_6] Hive 的内置函数应用
0. 说明 Hive 的内置函数的基本操作 | 时间函数 | String 函数 | 条件语句 | explode | split | substring 1. 基本操作 查看函数 show func ...
- Python内置的字符串处理函数整理
2019独角兽企业重金招聘Python工程师标准>>> Python内置的字符串处理函数整理 27 May 2011 16:30 Friday by 小屋 标签: 函数 字符串 Py ...
- python - - 函数 - - 内置函数和匿名函数
目录 内置函数 匿名函数 本章小结 相关练习题 1,内置函数 python里的内置函数.截止到python版本3.6.2,现在python一共为我们提供了68个内置函数. Built-inFuncti ...
- javaScript内置函数(内置函数,内置关键字)
javaScript内置函数(内置函数,内置关键字)js的内置对象是js自带,封装了一些常用的方法.常用的js内置对象有:String,Date,Array,Math等:js内置函数是浏览器内核自带的 ...
- Python学习8 函数 匿名函数 内置函数
转换相关的方法-eval 转换相关的方法-json 函数基本语法大纲 函数概念 示例: 题目: 函数的参数 def f(x,y=1,*z,**abc):print(x,y,z,abc,sep=&quo ...
- 学习日记0802函数递归,三元表达式,列表生成式,字典生成式,匿名函数+内置函数...
1 函数的递归 函数的递归调用时函数嵌套调用的一种特殊形式,在调用的过程中又直接或者间接的调用了该函数 函数的递归调用必须有两个明确的阶段: 1 回溯:函数一次次的调用下去每一次调用,问题的规模都应该 ...
- 函数【七】高阶函数/内置函数
python函数式编程 高阶函数:就是把函数当成参数传递的一种函数 1.函数名可以进行赋值: 2.函数名可以作为函数参数,还可以作为函数的返回值: a.函数是第一类对象 b.函数可以被赋值 c.可以被 ...
- Python之第六章 内置容器 --- 字符串
目录 Python之第六章 内置容器 --- 字符串 1.概念 2.凭借字符串 --- + 3.多行字符串 4.字符串的切片 例 输入员工省份证号,输出出生日期 5.分隔合并字符串 分隔字符串 合并字 ...
- Hive 常用内置函数
一.系统内置函数常用操作 1)查看系统自带的函数 hive> show functions; 2)显示自带的函数的用法 hive> desc function upper; 3)详细显示自 ...
最新文章
- 加密工具类 - CryptoUtils.java
- SmartForms 小技巧
- python matplotlib绘图 axes和pyplot用法的区别是什么?子图subplot
- mysql设计功能设置表_MySQL数据表的设计
- 17.立体匹配——匹配问题,好区域匹配 测验,窗口大小的影响,遮蔽(Occlusion),顺序约束_2
- php教程水印,PHP教程之ImageTTFText函数实现图像加文字水印的详细资料说明
- Client-Side UI Automation Provider - WinForm Sample
- AI公开课丨ASER:基于高阶选择偏好的常识知识图谱
- java word文档 转 html文件
- 【手势识别】基于matlab肤色静态手势识别【含Matlab源码 288期】
- [Java]面向对象编程
- 【Python爬虫实战】【天天基金网】想要低风险+心动收益?5分钟学会筛选优质债券基金
- Recipe 1.5. Trimming Space from the Ends of a String(Python Cookbook)
- TeamViewer一直显示“未就绪”什么原因?
- 用科技点亮公益力量,皮卡智能仅用2张照片,还原了老人一生的故事
- 别让生气毁了你的生活(深度好文)
- Windows系统蓝屏代码分析
- 寒江独钓 第二章 课后习题
- XUL使用中的常见错误
- 智能住宅小区安防报警网络系统
热门文章
- 如何零基础快速开发上手app,成为app开发高手
- 美国老师用的思维导图书,真正培养孩子的思维能力!
- 这瓶普普通通的六神花露水_凭什么能卖到500块?
- udec采场开挖教程_基于UDEC的岩质边坡开挖爆破节点拟静力稳定性计算方法
- php复姓怎么排序,这些高大上的复姓,你喜欢哪个?
- 安装Ubuntu14.04系统简易教程(使用rufus-3.1)
- Excel程序错误-误将1900年判断为闰年
- protues用一片74hc595控制两位数码管
- 《Python爬虫100例》复盘⑦,解决手机APP爬虫环境问题
- 【服务器租用与托管】什么是服务器租用,为什么要租用服务器呢?