hive sql时间操作

最近做了一些mysql转换为hive sql的工作,发现hive sql不支持INTERVAL操作,对于hive sql需要的时间需要进行简单的操作,总结一下:

1.hive sql获取当前时间

1)获取时间戳

unix_timestamp()

2)获取指定格式的时间

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

2.获取过去一分钟的时间

例:现在是2019-10-1 12:06:12
获取2019-10-1 12:05:12的时间

1)获取过去一分钟的时间戳

时间戳的机制是没过1秒,时间戳+1,所以获取上一分钟的时间戳,可以在现在时间的时间戳的基础上减去60

unix_timestamp('2019-10-1 12:06:12') - 60

2)获取上一秒的指定时间格式

from_unixtime(unix_timestamp('2019-10-1 12:06:12') - 60,'yyyy-MM-dd HH:mm:ss')

3.获取上一个月的时间

1)通过时间戳加减获取

from_unixtime(unix_timestamp() - 60 * 60 * 24 * 30,'yyyy-MM-dd HH:mm:ss')

2)通过字符串拼接

concat(from_unixtime(unix_timestamp(),'yyyy-'),month(from_unixtime(unix_timestamp(),'yyyy-MM-dd HH:mm:ss')) -1)

4.获取过去一分钟

例:现在是2019-10-1 12:06:12
获取2019-10-1 12:05:00的时间
开始的思路:
hive存在提取时间年,月,日的时间函数。

select year('2015-04-02 11:32:12');
输出:2015
select month('2015-12-02 11:32:12');
输出:12
select day('2015-04-13 11:32:12');
输出:13
select hour('2015-04-13 11:32:12');
输出:11
select minute('2015-04-13 11:32:12');
输出:32
select second('2015-04-13 11:32:56');
输出:56

所以我想获取的分钟数下减1,再进行字符串拼接。但是会出现如下的问题:

在这里插select concat(concat(from_unixtime(unix_timestamp('2019-10-1 12:00:12'),'yyyy-MM-dd HH:'),minute(from_unixtime(unix_timestamp('2019-10-1 12:00:12'),'yyyy-MM-dd HH:mm:ss'))-1),':00');

输出:2019-10-01 12:-1:00

这是不合法的,所以需要进行时间戳转化才可以。

select concat(concat(from_unixtime(unix_timestamp('2019-10-1 12:00:12'),'yyyy-MM-dd HH:'),minute(from_unixtime(unix_timestamp('2019-10-1 12:00:12') - 60,'yyyy-MM-dd HH:mm:ss'))),':00');

输出:2019-10-01 12:59:00
发布了26 篇原创文章 · 获赞 0 · 访问量 796

猜你喜欢

转载自blog.csdn.net/u013317894/article/details/103679952