Hive数学函数
–四舍五入:round
select round(45.926,2),round(45.926,0),round(45.926,-1),round(45.926,-2);
注:0是个位,-1是十位即个位向上进或去掉。上面的结果是:45.93 46 50 0
–向上取整:ceil
select ceil(45.9);
结果是:46
–向下取整 :floor
select floor(45.9);
结果:45
Hive 字符函数
字符函数
lower:字符串转小写
upper:转大写
length:字符串长度,指的是字符数
concat:拼接字符串
substr:求字符串的子串
trim:去掉字符串的前后空格
lpad:左填充
rpad:右填充
栗子如下:
--length:长度
select length('Hello World'),length('你好'); #汉字长度是2个字符,但是字节数是4位
--concat:拼接
select concat('Hello‘,World');
--substr:求子串
substr(a,b):从a中,第b位开始取,取右边所有的字符
select substr('Hello World',3) #结果:lo World
substr(a,b,c):从a中,第b位开始取,取c个字符
select substr('Hello World',3,4) #结果:lo W
--lpad:左填充
--rpad:右填充
lpad(a,b,c):将a填充到b位,用c填充
abcd--->填充到10位
select lpad('abcd',10,'*'),rpad('abcd',10,'*')
收集函数
–size:map集合里Key,value的个数
select size(map(1,'Tom',2,'Mary')); #结果:2
转换函数
–cast:类型的转换
select cast(1 as float); #将1转换成浮点型,结果:1.0
#将字符串转换成日期型
select cast('2018-1-5' as date); #结果是日期:2015-01-05
日期函数
-to_date:取出字符串中日期的部分
-year: 取日期中的年
-month:取日期中的月
-day:取日期中的日
-weekofyear:返回一个日期在一年中是第几个星期
-datediff:两个日期相减,返回它们相差的天数
-date_add:一个日期值上加上多少天
-date_sub:在一个日期上减去多少天
栗子如下:
--to_date:取字符串中日期部分
select to_date('2018-01-05 13:23:11'); #结果:2018-01-05
--year,month,day:返回年,月,日
select year('2018-01-05 13:23:11'),month('2018-01-05 13:23:11'),day('2018-01-05 13:23:11');
--weekofyear:返回一年中第几个星期
select weekofyear('2018-01-05 13:23:11');
--datediff:返回两个日期相差多少天
select datediff('2018-01-05 13:23:11','2017-12-24');
--date_add:在日期值上加上多少天是什么日期
select date_add('2018-01-05 13:23:11',2),date_sub('2018-01-05 13:23:11',2);
条件函数
coalesce:从左到右返回第一个不为null的值
select comm,sal,coalesce(comm,sal) from emp; #coalesce(comm,sal)第3列会显示这两个值中不为Null的值
case…when:条件表达式
CASE a WHEN b THEN c [WHEN d THEN e]*[ELSE f] END
给员工涨工资:总裁1000 经理800 其它400
select ename,job,sal,
case job when 'PRESIDENT' then sal+1000
when 'MANAGER' then sal+800
else sal+400
end
from emp;
但是HQL不能这样分开写,要写在一行才行
select ename,job,sal,case job when 'PRESIDENT' then sal+1000 when 'MANAGER' then sal+800 else sal+400 end from emp;
聚合函数
-count
-sum
-min
-max
-avg
select count(*),sum(sal),max(sal),min(sal),avg(sal) from emp;
表生成函数
-explode:可以把一个map集合或者数组中的每个元素单独生成一个行
select explode(map(1,'Tom',2,'Mary',3,'Mike'));
#它会将map中的每个Key-value值单独生成一行,上面生成3行数据
#结果如下:
1 Tom
2 Mary
3 Mike
Hive函数概括图