您的位置:首页 > 其它

hive获取今天、昨天、明天的日期

2016-09-14 16:43 3211 查看
主题:解决hive获取今天、昨天、明天的日期的问题

注意:由于hive内置函数中,没有提供获取昨天和明天的日期函数,所以需要编写自定义函数去实现

1、获取今天时间(格式可以自定义)

语句:

select from_unixtime(unix_timestamp(),'yyyy-MM-dd HH:mm:ss')

返回结果:

2016-09-14 16:21:59

2、获取昨天、明天时间(需要编写UDF自定义函数)

(1)此处不大篇幅讲解编写hive udf的buzz,如需查看详细,请见:http://blog.csdn.net/high2011/article/details/52425430

(2)此处只讲实现udf的java代码如下:

import org.apache.hadoop.hive.ql.exec.UDF;
import org.apache.hadoop.io.Text;

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;

/**
* Document:本类作用---->获取明天或者昨天时间
* User: yangjf
* Date: 2016/9/14  16:26
*/
public class NextDay extends UDF {
public String evaluate(int i) {
Date date=new Date();//取时间
Calendar calendar = new GregorianCalendar();
calendar.setTime(date);
calendar.add(calendar.DATE,i);//把日期往后增加一天.整数往后推,负数往前移动,0代表今天的时间
date=calendar.getTime();      //这个时间就是日期往后推一天的结果
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String dateString = formatter.format(date);
return dateString;
}
public static void main(String[] args) {
System.out.println("今天时间:"+new NextDay().evaluate(0));
System.out.println("明天时间:"+new NextDay().evaluate(1));
System.out.println("昨天天时间:"+new NextDay().evaluate(-1));
}
}
/**
* 结果:今天时间:2016-09-14 16:35:58
*       明天时间:2016-09-15 16:35:58
*       昨天时间:2016-09-13 16:35:58
* /


(3)在hive中注册临时函数:"getMyDate"

(4)使用函数:

获取今天时间----》select   getMyDate(0);

2016-09-14 16:38:31

获取明天时间----》select   getMyDate(1);

2016-09-15 16:38:31

获取昨天时间----》select   getMyDate(-1);

2016-09-13 16:38:31

以上测试已经通过,可直接使用,如有疑问,请留言,欢迎各位批评指正!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: