51cto赵强HADOOP学习(十七)hive的函数
2017-12-20 本文已影响0人
lehuai
hive的内置函数
image.png数学函数
--round
--ceil
--floor
--四舍五入
select round(45.926,2),round(45.926,1),round(45.926,0),round(45.926,-1),round(45.926,-2);
--向上取整
select ceil(45.926);
--向下取整
select floor(45.926);
字符函数
--lower //把字符串转换成小写
--upper //把字符串转换成大写
select lower('Hello World'),upper('Hello World');
--length //测字符串的长度
select length('Hello World'),length('你好');
--concat //拼加字符串
select concat('Hello',' World');
--substr //求一个字符串的子串
substr(a,b):从a中,第b位开始取,取右边所有的字符
select substr('Hello World',3);
substr(a,b,c):从a中,第b位开始取,取c个字符
select substr('Hello World',3,4);
--trim //去掉一个字符串的空格
--lpad //左填充
--lpad //左填充 abcd --->10位
select lpad('abcd',10,'*');
--rpad //右填充
--rpad //右填充
select rpad('abcd',10,'*');
Hive的收集函数
--size
size(map(<key,value>,<key,value>));
select size(map(1,'Tom',2,'Mary'));
Hive的转换函数
--cast
select cast(1 as bigint);
select cast(1 as float);
select cast('2015-04-10' as date);
日期函数
-to_date
select to_date('2015-04-23 11:23:11');
-year
-month
-day
select year('2015-04-23 11:23:11'),month('2015-04-23 11:23:11'),day('2015-04-23 11:23:11');
-weekofyear
select weekofyear('2015-04-23 11:23:11');
-datediff
select datediff('2015-04-23 11:23:11','2014-04-23 11:23:11');
-date_add
-date_sub
select date_add('2015-04-23 11:23:11',2),date_sub('2015-04-23 11:23:11',2);
条件函数
-coalesce:从左到右返回第一个不为null的值
-case...when...:条件表达式
CASE a WHEN b THEN c [WHEN d THEN e]* [ELSE f] END
select comm,sal,coalesce(comm,sal) from emp6;
给员工涨工资,总裁1000 经理800 其他400
select ename,job,sal,case job when 'PRESIDENT' then sal+1000 when 'MANAGER' then sal+800 else sal+400 end
from emp6;
聚合函数
-count
-sum
-min
-max
-avg
select count(*),sum(sal),max(sal),min(sal),avg(sal) from emp6;
表生成函数
-explode
select explode(map(1,'Tom',2,'Mary',3,'Mike'));
-json_tuple
Hive的自定义函数(UDF)
Hive的自定义函数(UDF): User Defined Function
可以直接应用于select语句,对查询结构做格式化处理后,再输出内容
Hive自定义函数的实现细节
自定义UDF需要继承org.apache.hadoop.hive.ql.UDF
需要实现evaluate函数,evaluate函数支持重载
Hive自定义函数的部署运行
把程序打包放到目标机器上去
进入hive客户端,添加jar包:
hive>add jar /run/jar/udf_test.jar
创建临时函数:
hive>CREATE TEMPORARY FUNCTION add_example AS 'hive.udf.Add';
查询HQL语句:
SELECT add_example(8, 9) FROM scores;
SELECT add_example(scores.math, scores.art) FROM scores;
SELECT add_example(6, 7, 8, 6.8) FROM scores;
销毁临时函数:
hive> DROP TEMPORARY FUNCTION add_example;