暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

[Hive系列02] 数学函数&简单字符串处理函数

数据分析师的FIRE人生 2021-06-03
2009

点击上方「数据分析师的FIRE人生」→

点击右上角「...」→设为星标


大家好,我是风影楼,一名互联网公司的数据分析师。之前我曾在CSDN编写了Hive系列的付费博客专栏,目前收获了25W次的访问,不过由于CSDN的付费设置无法取消,所以我决定在公众号重新免费分享一遍。这一篇主要介绍Hive中的数学函数和简单字符串处理函数。

「数学函数」


函数描述及举例

round(DOUBLE a)

传入DOUBLE类型的参数a,返回对a四舍五入的整数值,但返回的数据类型是DOUBLE,所以会有 .0。

举例:

hive (app)> select round(2.5);

3.0

round(DOUBLE a, INT d)

传入DOUBLE类型的参数a,INT类型的参数d,返回保留d位小数的DOUBLE型的近似值。

举例:

hive (app)> select round(3.14,1);

3.1

floor(DOUBLE a)

向下取整,传入DOUBLE类型的参数a,返回<=a的最大的BIGINT型整数。

举例:

hive (app)> select floor(2.9);

2

ceil(DOUBLE a)

ceiling(DOUBLE a)

向上取整,传入DOUBLE类型的参数a,返回>=a的最小的BIGINT型整数。

举例:

hive (app)> select ceil(2.1);

3

hive (app)> select ceiling(2.1);

3

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

pow(DOUBLE a, DOUBLE p)

power(DOUBLE a, DOUBLE p)

计算a的p次幂,传入DOUBLE类型的参数a和n(整型会被自动转为DOUBLE),返回DOUBLE类型的a的n次幂。

举例:

hive (app)> select pow(2,3);

8.0

sqrt(DOUBLE a)

计算a的平方根,传入DOUBLE类型的参数a(整型会被自动转为DOUBLE),返回DOUBLE类型的a的平方根。

举例:

hive (app)> select sqrt(4);

2.0

abs(DOUBLE a)

计算a的绝对值,传入DOUBLE类型的参数a(整型会被自动转为DOUBLE),返回DOUBLE类型的a的绝对值。

举例:

hive (app)> select abs(-2);

2


sin(DOUBLE a)

计算a的正弦值

asin(DOUBLE a)

计算a的反正弦值

cos(DOUBLE a)

计算a的余弦值

acos(DOUBLE a)

计算a的反余弦值

tan(DOUBLE a)

计算a的正切值

atan(DOUBLE a)

计算a的反正切值

negative(INT a)

negative(DOUBLE a)

计算a的相反数

sign(DOUBLE a)

如果a是正数则返回1.0,是负数则返回-1.0,否则返回0.0

e()

数学常数e

pi()

数学常数pi,3.1415926……

factorial(INT a)计算a的阶乘,Hive1.2.0后才有
cbrt(DOUBLE a)计算a的立方根,Hive1.2.0后才有

exp(DOUBLE a)

计算e的a幂次方, a可为小数

ln(DOUBLE a)

计算以e为底的对数,a可为小数

log10(DOUBLE a)

计算以10为底的对数,a可为小数

log2(DOUBLE a)

计算以2为底的对数,a可为小数

log(DOUBLE base, DOUBLE a)

计算以base为底的对数,base 与 a都是DOUBLE类型

「字符串处理函数」

函数
描述及举例
concat(string A, string B...)

对二进制字节码或字符串按次序进行拼接,例如, concat('foo', 'bar')返回 'foobar'.这个函数可以连接任意数量的字符串。

举例:

hive (app)> select concat('a','b','c');

abc

concat_ws(string SEP, string A,string B...)

concat_ws(string SEP, array)

与concat()类似,但使用指定的分隔符进行连接。

举例:

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

substr(string A, int start)

对于字符串A,从start位置开始截取字符串并返回

举例:

截取'2019-07-08 12:00:00'从第六个字符开始到最后左右的字符串

hive (app)> select substr('2019-07-08 12:00:00',6);

07-08 12:00:00


当开始位置传入-1时,会返回该字符串的最后一个字符

hive (app)> select substr('2019-07-08',-1);

8


当开始位置传入-2时,会返回该字符串的最后两个字符,以此类推

hive (app)> select substr('2019-07-08',-2);

08

substring(string A, int start)

substr(string A, int start, int len)

substring(string A, int start, int len)

对于二进制/字符串A,从start位置开始截取长度为length的字符串并返回。

举例:

截取'2019-07-08 12:00:00'从第1个字符开始,长度为10个字符的字符串,即只截取日期

hive (app)> select substr('2019-07-08 12:00:00',1,10);

2019-07-08

split(string str, string pat)

按照正则表达式pat来分割字符串str,并将分割后的数组字符串的形式返回。

举例:

按-将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"]

format_number(number x, int d)

将数值X转换成"#,###,###.##"格式字符串,并保留d位小数,如果d为0,将进行四舍五入且不保留小数。

举例:

hive (app)> select format_number(10000000.123,1);

10,000,000.1

length(string A)

返回字符串A的长度,如果A不是string格式,Hive会自动将其转为string格式。

举例:

hive (app)> select length('abcd');

4

hive (app)> select length(1234);

4

lower(string A) 

lcase(string A)

将字符串A中的字母转换成小写字母, 例如, lower('fOoBaR') 返回 'foobar'.

upper(string A) 

ucase(string A)

将字符串A中的字母转换成大写字母,例如,upper('fOoBaR') 返回 'FOOBAR'..
initcap(string A)将字符串A转换第一个字母大写,其余字母小写的字符串
lpad(string str, int len, string pad)从左边开始对字符串str使用字符串pad填充,最终len长度为止,如果字符串str本身长度比len大的话,将去掉多余的部分
rpad(string str, int len, string pad)从右边开始对字符串str使用字符串pad填充,最终len长度为止,如果字符串str本身长度比len大的话,将去掉多余的部分
ltrim(string A)将字符串A前边出现的空格去掉
rtrim(string A)将字符串A后边出现的空格去掉
trim(string A)将字符串A前后出现的空格去掉
repeat(string A, int n)

返回n个字符串A连接成的字符串。

举例:

hive (app)> select repeat('abc',2);

abcabc

reverse(string A)

返回字符串A倒序的字符串。

举例:

hive (app)> select reverse('abc');

cba


文章转载自数据分析师的FIRE人生,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论