注意:由于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/chenjieit619/article/details/53169402
(2)此处只讲实现udf的Java代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35 |
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
以上测试已经通过,可直接使用,如有疑问,请留言,欢迎各位批评指正!
原文地址:http://blog.csdn.net/high2011/article/details/52539071