本篇文章只先列举一些关于Hive的数学函数和字符串函数,别的Hive函数如集合函数、聚合函数、窗口函数等暂且不表。
虚拟机版本:VMware workstation 15.5 pro
终端模拟器:Xshell 6
JDK版本:jdk-8u171-linux-x64
Hadoop版本:hadoop-3.1.3
Hive版本:apache-hive-3.1.2
一、数学函数(都说是数学函数了当然函数的参数都是数值啦)
若对函数的记忆比较模糊不敢确定了则可使用Hive的desc function的函数查询功能
如:
desc function pow;
+--------------------------------------------+
| tab_name |
+--------------------------------------------+
| pow(x1, x2) - raise x1 to the power of x2 |
+--------------------------------------------+
1、pow(a,b)
-- 求a的b次方
select pow(2,3);
+------+
| _c0 |
+------+
| 8.0 |
+------+
select pow(4,1/2);
+------+
| _c0 |
+------+
| 2.0 |
+------+
-- 注:power()作用与pow()相同
2、mod(a,b)
-- a对b取余
select mod(3,5);
+------+
| _c0 |
+------+
| 3 |
+------+
3、pmod(±a,b)
-- a对b取余,a可为正负数
select pmod(-3,5);
+------+
| _c0 |
+------+
| 2 |
+------+
-- 注:pmod(-3,5)的过程为(-3+n*5)%5 => (-3+1*5)%5
-- n为正整数取值从1开始带入至表达式第一次为正值时的值
4.1、rand()
-- 取随机数
select rand();
+----------------------+
| _c0 |
+----------------------+
| 0.27571806059688553 |
+----------------------+
4.2、rand(n)
-- 当rand()中有一个值时,随机数则会确定下来,下次取同样的rand(n)时,为一个定值
5、sqrt(n)
-- 取n的平方根
select sqrt(9);
+------+
| _c0 |
+------+
| 3.0 |
+------+
6、sign(n)
-- 取n的符号,-1则n为负数,0为0,1为正数
select sign(-6);
+-------+
| _c0 |
+-------+
| -1.0 |
+-------+
select sign(6);
+------+
| _c0 |
+------+
| 1.0 |
+------+
select sign(0);
+------+
| _c0 |
+------+
| 0.0 |
+------+
7、positive(n)
-- 取值本身,并无什么卵用
select positive(-4);
+------+
| _c0 |
+------+
| -4 |
+------+
8、negative(n)
-- 取相反数
select negative(6);
+------+
| _c0 |
+------+
| -6 |
+------+
9、abs(n)
-- 取绝对值
select abs(-6);
+------+
| _c0 |
+------+
| 6 |
+------+
10、ceil(n)
-- 向上取整
select ceil(4.1244);
+------+
| _c0 |
+------+
| 5 |
+------+
11、floor(n)
-- 向下取整
select floor(4.1244);
+------+
| _c0 |
+------+
| 4 |
+------+
12.1、round(n)
-- 四舍五入
select round(4.34);
+------+
| _c0 |
+------+
| 4 |
+------+
select round(4.56);
+------+
| _c0 |
+------+
| 5 |
+------+
12.2、round(num,n)
-- 四舍五入,保留小数点后n位
select round(4.13473,3);
+--------+
| _c0 |
+--------+
| 4.135 |
+--------+
13、bround(n)
-- 银行家舍入法又称高斯舍入法(本人了解较浅,项目有关金融或感兴趣的可以仔细研究)
select bround(2.5);
+------+
| _c0 |
+------+
| 2 |
+------+
select bround(3.5);
+------+
| _c0 |
+------+
| 4 |
+------+
-- 注:银行家舍入法,大体上是四舍六入,但若尾数为5且前一位值是偶数则不进1,否则进1位
14、bin(n)
-- 十进制转换为二进制
select bin(4);
+