Hive 内置函数

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函数概括图
这里写图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值