您当前的位置: 首页 >  hive

宝哥大数据

暂无认证

  • 1浏览

    0关注

    1029博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

hive函数

宝哥大数据 发布时间:2017-12-18 19:48:43 ,浏览量:1

一、 系统内置函数 如果想知道一个函数的使用, 使用 desc function funName
hive> desc function upper;
OK
upper(str) - Returns str with all characters changed to uppercase
Time taken: 0.008 seconds, Fetched: 1 row(s)
hive> 

1.1、数据函数 1.2、字符函数 1.3、收集函数和转换函数 1.3.1、收集函数格式:
size(map(, ));

范例:

hive> select size(map(1, 'a', 2, 'b'));
OK
2
Time taken: 0.79 seconds, Fetched: 1 row(s)
hive> 

1.3.2、转换函数格式

将莫个数据按照某种格式转化

hive> select cast(1 as float);
OK
1.0
Time taken: 0.648 seconds, Fetched: 1 row(s)
hive> 
1.3.3、case when
select name, 
case 
when age < 10 then "婴儿"      //注意各个when...then 后没有逗号分隔
when age < 18 then "少年"
when age < 20 then "青少年"
when age < 30 then "青年"
when age < 40 then "中年"
else "老年"   				 //其他条件 使用else
end as age,					 //end 结束, 通常使用as 设置别名
sex, province from person;

这里写图片描述

1.4、日期函数 1.4.1、to_date: 从一个字符串中获取日期,注意:必须以日期开头

这里写图片描述

1.4.2、year, month, day
hive> select year('2017-12-15'), month('2017-12-15'), day('2017-12-15');
OK
2017    12      15
Time taken: 0.729 seconds, Fetched: 1 row(s)
hive> 
1.4.3、weekofyear:一年的第几周
hive> select weekofyear('2017-12-15') ;
OK
50
Time taken: 0.624 seconds, Fetched: 1 row(s)
hive> 
1.4.4、datediff: 两个日期相差多少天
hive> select datediff('2017-12-15', '2017-12-13');
OK
2
Time taken: 0.64 seconds, Fetched: 1 row(s)
hive> 

hive> select datediff('2017-12-15 13:45', '2017-12-13 12:30');
OK
2
Time taken: 0.679 seconds, Fetched: 1 row(s)
hive> select datediff('2017-12-15 13:45:23', '2017-12-13 12:30:23');
OK
2
Time taken: 0.634 seconds, Fetched: 1 row(s)
hive> 
1.4.4、date_add, date_sub;

日期增加函数: date_add语法: date_add(string startdate, int days)

  • 返回值: string
  • 说明: 返回开始日期startdate增加days天后的日期。

举例:

hive>   select date_add('2012-12-08',10) from dual;
2012-12-18

日期减少函数: date_sub语法: date_sub (string startdate, int days)

  • 返回值: string
  • 说明: 返回开始日期startdate减少days天后的日期。

举例:

hive>   select date_sub('2012-12-08',10) from dual;
2012-11-28
二、自定义函数

1)Hive 自带了一些函数,比如:max/min等,但是数量有限,自己可以通过自定义UDF来方便的扩展。 2)当Hive提供的内置函数无法满足你的业务处理需要时,此时就可以考虑使用用户自定义函数(UDF:user-defined function)。 3)根据用户自定义函数类别分为以下三种:

  • (1)UDF(User-Defined-Function)

    • 一进一出
  • (2)UDAF(User-Defined Aggregation Function)

    • 聚集函数,多进一出
    • 类似于:count/max/min
  • (3)UDTF(User-Defined Table-Generating Functions)

    • 一进多出
    • 如lateral view explore() 4)官方文档地址: https://cwiki.apache.org/confluence/display/Hive/HivePlugins

5)编程步骤:

  • (1)继承org.apache.hadoop.hive.ql.UDF
  • (2)需要实现evaluate函数;evaluate函数支持重载;
  • (3)在hive的命令行窗口创建函数
    • a)添加jar
      • add jar linux_jar_path
    • b)创建function,
      • create [temporary] function [dbname.]function_name AS class_name;
  • (4)在hive的命令行窗口删除函数
    • Drop [temporary] function [if exists] [dbname.]function_name;

6)注意事项

  • (1)UDF必须要有返回类型,可以返回null,但是返回类型不能为void;
2.1、自定义UDF
1.创建一个Maven工程Hive
2.导入依赖
 
		
			org.apache.hive
			hive-exec
			2.1.1
		

3.创建一个类
package com.chb.hive.udf;
import org.apache.hadoop.hive.ql.exec.UDF;

public class Lower extends UDF {

	public String evaluate (final String s) {
		
		if (s == null) {
			return null;
		}
		
		return s.toLowerCase();
	}
}
4.打成jar包上传到服务器/uardata1/hivetest/udf.jar
5.将jar包添加到hive的classpath
	hive (default)> add jar /uardata1/hivetest/udf.jar
6.创建临时函数与开发好的java class关联
	hive (default)> create temporary function mylower as "com.chb.hive.udf.Lower";
7.即可在hql中使用自定义的函数strip 
	hive (default)> select ename, mylower(ename) lowername from emp;

2.2、自定义UDTF

继承自GnericUDTF,重写3个方法:

  • initialize(自定义输出的列名和类型)
  • process(将结果返回forward(result))
  • close
关注我的公众号【宝哥大数据】, 更多干货

在这里插入图片描述

关注
打赏
1587549273
查看更多评论
立即登录/注册

微信扫码登录

0.3676s