Hive 时间日期处理总结

最近用hive比较多,虽然效率低,可是因为都是T+1的业务模式。因此也就不要求太多了,够用就行。其中用的吧比较多就是时间了,因为大数据中不少字段都不是标准的时间类型字段,因此期间涉及了不少的时间日期字段的处理,这里作一个汇总。一遍之后查询使用。也方便你们学习。sql

下面列举几个用的比较多的状况进行说明:

得到当前日期的几种用法:

1.先来一个比较老的,select unix_timestamp() ;数据库

结果以下:函数

1

2.经过提示可知该用法已经被放弃了建议采用current_timestamp来替代。查结果以下:工具

2

3.若是当前时间为int类型则须要转义一下好比使用from_unixtime()学习

SELECT from_unixtime(unix_timestamp());

--2018-02-27 14:51:01

 

4.获取当前日期CURRENT_DATE。代码以下:大数据

SELECT CURRENT_DATE--2018-02-27

 

 

有关日期的函数:

1.对比日期函数,常常用于日期之间比较大小,或者计算差值,日期加减。spa

日期差值:datadiff(结束日期,开始日期),返回结束日期减去开始日期的天数。unix

日期加减:date_add(时间,增长天数),返回值为时间天+增长天的日期;date_sub(时间,减小天数),返回日期减小天后的日期。code

执行状况如图所示:blog

3

  注意若是想知道相差多少个小时又怎么去求那?咱们其实稍加改造便可。

  hour函数能够得到时间字段的小时数和datediff来获取两个日期相差的天数。而后利用天数*24+hour的差值即为所求,

  好比咱们求2018-02-27 10:00:00 与 2018-02-25 12:00:00相差多少?

 实例代码以下:
select (hour('2018-02-27 10:00:00')-hour('2018-02-25 12:00:00')+(datediff('2018-02-27 10:00:00','2018-02-25 12:00:00'))*24) as hour_subValue

--46 

  补充一个:返回当前时间下再增长num_months个月的日期  add_months(string start_date, int num_months)

2.上面介绍了hour函数,那么咱们也会须要其余的时间提取,很少说直接看代码,年月日时分秒:
select year('2018-02-27 10:00:00'),month('2018-02-27 10:00:00'),day('2018-02-27 10:00:00'),hour('2018-02-27 10:00:00'),minute('2018-02-27 10:00:00'),second('2018-02-27 10:00:00'),weekofyear('2018-02-27 10:00:00'); 

--2018    2    27    10    0    0    9

  补充:quarter,返回当前本年度第几个季度。

3.日期转换函数
to_date,语法: to_date(string timestamp),返回值为string类型的日期
示例以下:
select to_date('2018-02-27 10:03:01') ;

--2018-02-27
last_day(string date),返回这个月的最后一天的日期
select  last_day('2018-02-27 10:03:01');
--2018-02-28

 next_day返回当前时间的下一个星期几所对应的日期 。以下

select next_day('2018-02-27 10:03:01', 'TU');

--2018-03-06

  说明,输入日期为2-27,下个星期的周二为03-06,若是想要知道下周一的日期就是MO,周日就是SU,以此类推。

注意:

我跟无数多小白说过,西方国家周日是每周的第一天,因此日历和英语中都是现实周日再是周一,因此上面的下周日是3-4。注意喽!
 

总结

    以上是我平时常常用的一些日期相关的处理和函数,比较方便,想不起来就过来扫一眼。毕竟hive用的比较少,相对于关系型数据库的t-sql函数和方法仍是比较low的,毕竟是个转义工具。目前主流仍是hivesql,不过慢慢的都在想sparksql之类技术的转移了。之后有新的日期函数我会继续想本文中进行汇总,方便你们查询。
相关文章
相关标签/搜索