0


Hive时间日期函数一文详解+代码实例


前言

Hive是基于Hadoop的一个

数据仓库工具

,可以将

结构化的数据文件映射为一张表

,并提供

类SQL

查询功能。Hive中的表示纯逻辑表,只有表的定义等,即表的元数据(存储于MySQL中)。本质就是Hadoop的目录/文件,这种设计方式实现了元数据与数据存储分离。Hive本身不存储数据,它完全依赖HDFS和MapReduce。

时间在数据库中经常作为时间索引,在数据入库和出库以及更新的时候都需要变化。在一些指标计算或者是提取某段时间的数据时,都会根据数据库中的时间索引数据进行操作。因此很大一部分我们操作数据都得先从时间数据下手,但是想要真正提取到我们想要的时间作为索引,还需要我们掌握许多功能函数方便我们操作,这是一个比较复杂的运用过程。因此特地写下这篇文章,记录一些十分好用常用的处理Hive数据库SQL时间数据的函数,以及实例运用这些函数完成一些复杂查询任务。希望能够帮助到正在看此博文的各位,如果还有什么问题解决不了尽请在评论区提出,博主会一一作答。


一、HiveSQL运行过程

本质上HiveSQL是将sql语句转换为MapReduce程序:

这里不展开细化,直接仅需要知道Hive的SQL是和传统MYSQL和SQL server的SQL语法是不同的就够了,他们之间的语法也是存在很多差异。

二、Hive时间函数

1.获取当前时间

共有以下函数可以获取当前时间:
函数说明返回current_date()获取当前格式化日期2022-08-08current_timestamp()获取当前格式化日期2022-08-08 11:03:34.946unix_timestamp()获取当前unix时间戳1659927898

1.current_date()

select current_date();

2. current_timestamp()

select current_timestamp();

3. unix_timestamp()

select unix_timestamp();

2.获取指定时间维度

共有以下函数可以获取指定时间维度:
函数说明返回结果year()获取日期中的年2022quarter()获取日期中的季度3month()获取日期中的月8day()获取日期中的日8hour()获取日期中的小时11minute()获取日期中的分32second()获取日期中的秒52weekofyear()获取日期在当前年份的第几周32dayofweek()获取日期在当前周的第几天(周日为第一天)2last_day()获取日期当月最后一天2022-08-31next_day()获取当前日期之后的下个星期几的日期2022-08-15trunc()获取日期月初(参数MM),年初日期(参数YY)2022-08-01,2022-01-01

1. year()

select year(current_date());

2.quarter()

select year(current_date());

3.month()

select month(current_date());

4.day()

select day(current_date());

5.hour()

select hour(current_timestamp());

6.minute()

select minute(current_timestamp());

7.second

select second(current_timestamp());

8.weekofyear()

select weekofyear(current_timestamp());

9. dayofweek()

select dayofweek(current_timestamp());

10.last_day()

select last_day(current_timestamp());

11.next_day()

select next_day(current_date(),'MO');

12.trunc()

SELECT TRUNC(CURRENT_DATE(),'MM') 

SELECT TRUNC(CURRENT_DATE(),'YY') 

3.时间格式转换

函数说明返回to_date()获取日期时间中日期部分数据2022-08-08from_unixtime()unix时间戳到转时间格式yyyy-MM-dddate_format()日期、时间戳、字符串类型格式化输出标准时间格式yyyy-MM-ddunix_timestamp()获取当前时间的unix时间戳和日期转UNIX时间戳函数1659938033from_utc_timestamp/to_utc_timestamp()utc时间转换yyyy-MM-ddto_unix_timestamp()日期转unix时间戳1659938033

1.to_date()

select to_date(current_timestamp())

2. from_unixtime()

select from_unixtime(1659938033,'yyyy-MM-dd')

select from_unixtime(1659938033,'yyyyMMdd')

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

3.date_format

select date_format(current_timestamp(),'yyyy-MM-dd HH:mm:ss'); 

select date_format(current_date(),'yyyy-MM-dd');

select date_format('2022-08-09 12:12:12','yyyy-MM-dd HH:mm:ss'); 

4.unix_timestamp

select unix_timestamp();

SELECT unix_timestamp(current_timestamp())

5. from_utc_timestamp/to_utc_timestamp

select from_utc_timestamp(current_timestamp(),8);

select to_utc_timestamp(current_timestamp(),8);

6. to_unix_timestamp

select to_unix_timestamp('2022-08-09 11:10:27','yyyy-MM-dd HH:dd:ss');

4.时间运算

关于时间运算有很多个不同的方法来实现,自定义函数或者是使用函数拼凑获取自己想要的结果就行了。

这里列举几个常用的时间运算函数:
函数说明返回datediff()日期比较函数,返回开始日期减去结束日期的天数前者大于后者,返回值为正,否则,返回值为负。date_sub()日期减少函数,返回日期前n天的日期返回日期前n天的日期date_add()日期增加函数,返回日期后n天的日期返回日期后n天的日期months_between()返回两个日期之间包含的月数(结果为double类型)double类型月份数值

1.datediff()

select datediff('2022-08-14','2022-08-04');

select datediff('2022-08-04','2022-08-14');

2.date_sub()

SELECT date_sub('2022-08-04',10)

SELECT date_sub('2022-08-04',-10)

3.date_add()

其实和date_sub可以正负号替换,记住一个就行了:

select DATE_ADD('2022-08-04',10) 

4.months_between()

select months_between('2022-08-04','2022-08-14')

点关注,防走丢,如有纰漏之处,请留言指教,非常感谢

以上就是本期全部内容。我是fanstuck ,有问题大家随时留言讨论 ,我们下期见。


本文转载自: https://blog.csdn.net/master_hunter/article/details/126222842
版权归原作者 fanstuck 所有, 如有侵权,请联系我们删除。

“Hive时间日期函数一文详解+代码实例”的评论:

还没有评论