Hive第四天——Hive函数(常用数学函数与字符串函数)


本文参考自: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

版权声明:本文为weixin_45473750原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。