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
  • 创建functioncreate [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函数(内置函数(字符串函数,数学函数,日期函数,集合函数,条件函数,聚合函数,表生成函数)和自定义函数(自定义函数创建流程,临时函数,永久函数)))(四)相关推荐

  1. 2021年大数据Hive(五):Hive的内置函数(数学、字符串、日期、条件、转换、行转列)

    全网最详细的Hive文章系列,强烈建议收藏加关注! 后面更新文章都会列出历史文章目录,帮助大家回顾知识重点. 目录 系列历史文章 前言 Hive的内置函数 一.数学函数 1. 取整函数: round ...

  2. [Hive_6] Hive 的内置函数应用

    0. 说明 Hive 的内置函数的基本操作 | 时间函数 | String 函数 | 条件语句 | explode | split | substring 1. 基本操作 查看函数 show func ...

  3. Python内置的字符串处理函数整理

    2019独角兽企业重金招聘Python工程师标准>>> Python内置的字符串处理函数整理 27 May 2011 16:30 Friday by 小屋 标签: 函数 字符串 Py ...

  4. python - - 函数 - - 内置函数和匿名函数

    目录 内置函数 匿名函数 本章小结 相关练习题 1,内置函数 python里的内置函数.截止到python版本3.6.2,现在python一共为我们提供了68个内置函数. Built-inFuncti ...

  5. javaScript内置函数(内置函数,内置关键字)

    javaScript内置函数(内置函数,内置关键字)js的内置对象是js自带,封装了一些常用的方法.常用的js内置对象有:String,Date,Array,Math等:js内置函数是浏览器内核自带的 ...

  6. Python学习8 函数 匿名函数 内置函数

    转换相关的方法-eval 转换相关的方法-json 函数基本语法大纲 函数概念 示例: 题目: 函数的参数 def f(x,y=1,*z,**abc):print(x,y,z,abc,sep=&quo ...

  7. 学习日记0802函数递归,三元表达式,列表生成式,字典生成式,匿名函数+内置函数...

    1 函数的递归 函数的递归调用时函数嵌套调用的一种特殊形式,在调用的过程中又直接或者间接的调用了该函数 函数的递归调用必须有两个明确的阶段: 1 回溯:函数一次次的调用下去每一次调用,问题的规模都应该 ...

  8. 函数【七】高阶函数/内置函数

    python函数式编程 高阶函数:就是把函数当成参数传递的一种函数 1.函数名可以进行赋值: 2.函数名可以作为函数参数,还可以作为函数的返回值: a.函数是第一类对象 b.函数可以被赋值 c.可以被 ...

  9. Python之第六章 内置容器 --- 字符串

    目录 Python之第六章 内置容器 --- 字符串 1.概念 2.凭借字符串 --- + 3.多行字符串 4.字符串的切片 例 输入员工省份证号,输出出生日期 5.分隔合并字符串 分隔字符串 合并字 ...

  10. Hive 常用内置函数

    一.系统内置函数常用操作 1)查看系统自带的函数 hive> show functions; 2)显示自带的函数的用法 hive> desc function upper; 3)详细显示自 ...

最新文章

  1. 加密工具类 - CryptoUtils.java
  2. SmartForms 小技巧
  3. python matplotlib绘图 axes和pyplot用法的区别是什么?子图subplot
  4. mysql设计功能设置表_MySQL数据表的设计
  5. 17.立体匹配——匹配问题,好区域匹配 测验,窗口大小的影响,遮蔽(Occlusion),顺序约束_2
  6. php教程水印,PHP教程之ImageTTFText函数实现图像加文字水印的详细资料说明
  7. Client-Side UI Automation Provider - WinForm Sample
  8. AI公开课丨ASER:基于高阶选择偏好的常识知识图谱
  9. java word文档 转 html文件
  10. 【手势识别】基于matlab肤色静态手势识别【含Matlab源码 288期】
  11. [Java]面向对象编程
  12. 【Python爬虫实战】【天天基金网】想要低风险+心动收益?5分钟学会筛选优质债券基金
  13. Recipe 1.5. Trimming Space from the Ends of a String(Python Cookbook)
  14. TeamViewer一直显示“未就绪”什么原因?
  15. 用科技点亮公益力量,皮卡智能仅用2张照片,还原了老人一生的故事
  16. 别让生气毁了你的生活(深度好文)
  17. Windows系统蓝屏代码分析
  18. 寒江独钓 第二章 课后习题
  19. XUL使用中的常见错误
  20. 智能住宅小区安防报警网络系统

热门文章

  1. 如何零基础快速开发上手app,成为app开发高手
  2. 美国老师用的思维导图书,真正培养孩子的思维能力!
  3. 这瓶普普通通的六神花露水_凭什么能卖到500块?
  4. udec采场开挖教程_基于UDEC的岩质边坡开挖爆破节点拟静力稳定性计算方法
  5. php复姓怎么排序,这些高大上的复姓,你喜欢哪个?
  6. 安装Ubuntu14.04系统简易教程(使用rufus-3.1)
  7. Excel程序错误-误将1900年判断为闰年
  8. protues用一片74hc595控制两位数码管
  9. 《Python爬虫100例》复盘⑦,解决手机APP爬虫环境问题
  10. 【服务器租用与托管】什么是服务器租用,为什么要租用服务器呢?