点击上方「数据分析师的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 |





