Hive 时间日期处理总结

Hive 时间日期处理总结

最近用hive比较多,虽然效率低,但是由于都是T+1的业务模式。所以也就不要求太多了,够用就行。其中用的吧比较多就是时间了,由于大数据中很多字段都不是标准的时间类型字段,所以期间涉及了很多的时间日期字段的处理,这里做一个汇总。一遍以后查询使用。也方便大家学习。

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

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

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.对比日期函数,经常用于日期之间比较大小,或者计算差值,日期加减。

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

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

执行情况如图所示:

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之类技术的转移了。以后有新的日期函数我会继续想本文中进行汇总,方便大家查询。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/119686.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • PyCharm 软件 离线 安装 插件「建议收藏」

    PyCharm 软件 离线 安装 插件「建议收藏」代理配置:https://blog.csdn.net/github_35160620/article/details/53209324 插件离线下载地址:http://plugins.jetbrains.com/ 2.下载插件安装插件1、下载插件:2、安装插件:settings->plugins->installpluginfromd…

    2022年8月28日
    4
  • Idea激活码最新教程2024.3.2.1版本,永久有效激活码,亲测可用,记得收藏

    Idea激活码最新教程2024.3.2.1版本,永久有效激活码,亲测可用,记得收藏Idea 激活码教程永久有效 2024 3 2 1 激活码教程 Windows 版永久激活 持续更新 Idea 激活码 2024 3 2 1 成功激活

    2025年5月31日
    3
  • 用eclipse创建一个java项目_eclipse创建第一个Java项目

    用eclipse创建一个java项目_eclipse创建第一个Java项目用eclipse创建一个Java项目流程:创建一个JavaProject–>创建一个Package–>创建类,然后就可以写代码并运行了。以下是具体操作:1、打开eclipse的工作空间(orkspace)到工作界面2、新建一个Java项目自己填写项目名3、新建一个包4、创建一个类勾选复选框(publicstaticvoidmain(String[]args)),是为了自动…

    2022年7月9日
    18
  • STM32 JLINK接口定义 JTAG/SWD「建议收藏」

    STM32 JLINK接口定义 JTAG/SWD「建议收藏」

    2022年5月8日
    66
  • openwrt旁路由设置的正确方式

    openwrt旁路由设置的正确方式最近在玩旁路由,踩了一些坑,也学习了点相关知识,特整理记录下。一、旁路由的配置上图是旁路由的连接方式,一般作为旁路由的只有一个LAN口,让他们ip在一个网段即可比如主路由网关192.168.0.1,旁路由配置成192.168.0.21.主路由配置:手动指定LAN为192.168.0.1。#DHCP配置中把网关和DNS改成旁路由ip地址,如192.168.0.2。2.旁路由配置:关闭DHCP,把网关改成主路由地址,如192.168.0.1,关闭桥接模式.采用路由模式。这样配置后,网络流量如下图

    2022年6月13日
    398
  • burp suite使用教程(抓包,截包,改包)

    burp suite使用教程(抓包,截包,改包)1.浏览器代理设置(以Chrome为例)设置局域网(LAN)设置,地址写127.0.0.1端口:随便(不冲突且在端口范围即可)。2.burpsuite监听设置。proxy–options–add(添加代理与上边浏览器设置的一致即可。最后记得勾上代理设置即可)3.抓包如下图:拦截了一个请求,可以通过按钮Forward(放行请求),Drop(弃掉拦截)。R…

    2022年6月11日
    437

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号