本文参考自:https://blog.csdn.net/qq_23897391/article/details/94715278
Hive—常用数学函数与常见字符串函数
一、常见数学函数
1.四舍五入 round
round(DOUBLE a)
功能:传入DOUBLE类型的参数a,返回对a四舍五入的整数值,但返回的数据类型是DOUBLE,所以会有 .0
hive (app)> select round(2.5);
3.0
hive (app)> select round(2.2);
2.0
round(DOUBLE a,INT d)
功能:传入DOUBLE类型的参数a,INT类型的参数d,返回保留d位小数的DOUBLE型的近似值
hive (app)> select round(2.234,2);
2.23
hive (app)> select round(2.235,2);
2.24
2. 向下取整 floor
floor(DOUBLE a)
功能:传入DOUBLE类型的参数a,返回<=a的最大的BIGINT型整数
hive (app)> select floor(2.2);
2
hive (app)> select floor(2.9);
2
3.向上取整 ceil
ceil(DOUBLE a)
ceiling(DOUBLE a)
功能:传入DOUBLE类型的参数a,返回>=a的最小的BIGINT型整数
hive (app)> select ceil(2.9);
3
hive (app)> select ceil(2.1);
3
hive (app)> select ceiling(2.9);
3
hive (app)> select ceiling(2.1);
3
4.随机数 rand
rand()
rand(INT seed)
功能:每行返回一个DOUBLE型随机数,seed是随机种子,设置seed可以使生成的随机数固定,否则每次生成的随机数是不同的。
hive (app)> select rand();
0.6856598085583834
hive (app)> select rand();
0.5677221950777468
hive (app)> select rand(1);
0.7308781907032909
hive (app)> select rand(1);
0.7308781907032909
5.求n次幂 pow
pow(DOUBLE a, DOUBLE n)
功能:传入DOUBLE类型的参数a和n(整型会被自动转为DOUBLE),返回DOUBLE类型的a的n次幂
hive (app)> select pow(2,3);
8.0
6.求平方根 sqrt
abs(DOUBLE a)
功能:传入DOUBLE类型的参数a(整型会被自动转为DOUBLE),返回DOUBLE类型的a的绝对值
hive (app)> select abs(-2);
2
7.求绝对值 abs
abs(DOUBLE a)
功能:传入DOUBLE类型的参数a(整型会被自动转为DOUBLE),返回DOUBLE类型的a的绝对值
hive (app)> select abs(-2);
2
二、常见字符串函数
1.连接字符串 concat
concat(string|binary A, string|binary B…)
功能:对二进制字节码或字符串按次序进行拼接,这个函数可以连接任意数量的字符串。
hive (app)> select concat('a','b');
ab
hive (app)> select concat('a','b','c');
abc
2.指定分隔符连接字符串 concat_ws
concat_ws(string SEP, string A, string B…)
功能:第一个参数SEP是剩余参数间的分隔符,如果分隔符是 NULL,返回值也将为 NULL。这个函数会跳过分隔符参数后的任何 NULL 和空字符串。总之与concat()类似,但使用指定的分隔符SEP,对后面的字符串或字符串数组进行连接。
使用-连接'2019','07','08'
hive (app)> select concat_ws('-','2019','07','08');
2019-07-08
函数会跳过分隔符参数后的任何 NULL 和空字符串
hive (app)> select concat_ws('-','2019',NULL,'08');
2019-08
如果分隔符是 NULL,返回值也将为 NULL
hive (app)> select concat_ws(NULL,'2019','07','08');
NULL
3.截取字符串 substr
substr(string|binary A, int start)
substr(string|binary A, int start, int len)
功能:substr函数有两种用法,一种是只传入要截取的字符串A和开始截取字符串的位置start(即第几个字符),返回从开始到字符串结束所有的字符;
第二种是传入要截取的字符串A、开始截取字符串的位置start、截取字符串的长度,返回从开始指定长度的字符串。
substring与substr用法一致。
截取'2019-07-08 12:00:00'从第六个字符开始到最后左右的字符串
hive (app)> select substr('2019-07-08 12:00:00',6);
07-08 12:00:00
截取'2019-07-08 12:00:00'从第1个字符开始,长度为10个字符的字符串,即只截取日期
hive (app)> select substr('2019-07-08 12:00:00',1,10);
2019-07-08
当开始位置传入-1时,会返回该字符串的最后一个字符
hive (app)> select substr('2019-07-08',-1);
8
4.按指定分隔符分割字符串 split
split(string str, string pat)
功能:传入要分割的字符串,和指定分隔符,返回一个由分割后的字符串组成的数组。
按-将2019-07-08分割
hive (app)> select split('2019-07-08','-');
["2019","07","08"]
查看分割后返回数组中的第1个元素,在数组中,第一个元素的下标为0
hive (app)> select split('2019-07-08','-')[0];
2019
查看分割后返回数组中的第2个元素
hive (app)> select split('2019-07-08','-')[1];
07
查看分割后返回数组中的第3个元素
hive (app)> select split('2019-07-08','-')[2];
08
当字符串的分隔符为特殊字符时,需要使用\\进行转义,比如:.
hive (app)> select split('2019.07.08','.');
["","","","","","","","","","",""]
hive (app)> select split('2019.07.08','\\.');
["2019","07","08"]
5.格式化数字 format_number
format_number(number x, int d)
功能:将数值X转换成"#,###,###.##"格式字符串,并保留d位小数,如果d为0,将进行四舍五入且不保留小数。
hive (app)> select format_number(10000000.123,1);
10,000,000.1
6.字符串长度 length
length(string A)
功能:返回字符串A的长度,如果A不是string格式,Hive会自动将其转为string格式。
hive (app)> select lower('ABCdef');
abcdef
7.转换小写 lower
lower(string A)
功能:将字符串A中的所有字母转换成小写字母。
hive (app)> select lower('ABCdef');
abcdef
8.转换大写 upper
upper(string A)
功能:将字符串A中的所有字母转换成大写字母。
hive (app)> select upper('ABCdef');
ABCDEF
9.首字母大写其余小写 initcap
initcap(string A)
功能:将字符串A中的所有字母转换成首字母大写其余小写。
hive (app)> select initcap('ABCdef');
Abcdef
10.左填充 lpad
lpad(string str, int len, string pad)
功能:从左边开始对字符串str使用字符串pad填充,最终len长度为止,如果字符串str本身长度比len大的话,将去掉多余的部分。
hive (app)> select lpad('abc',6,'1');
111abc
11. 右填充 rpad
rpad(string str, int len, string pad)
功能:从右边开始对字符串str使用字符串pad填充,最终len长度为止,如果字符串str本身长度比len大的话,将去掉多余的部分。
hive (app)> select rpad('abc',6,'1');
abc111
12.去除首尾空格 trim
trim(string A)
功能:将字符串A前后出现的空格都去掉,此函数使用频率极高,表中的数据如果关联不上很有可能是数据前或后有空格!
hive (app)> select trim(' abc');
abc
hive (app)> select trim('abc ');
abc
hive (app)> select trim(' abc ');
abc
13.重复字符串 repeat
repeat(string str, int n)
功能:返回n个字符串A连接成的字符串。
hive (app)> select repeat('abc',2);
abcabc
14.倒序排列字符串 reverse
reverse(string A)
功能:返回字符串A倒序的字符串。
hive (app)> select reverse('abc');
cba