当前位置:   article > 正文

Hive实现日期维表_hive的时间工具表

hive的时间工具表

一、日期列表的实现

首先要实现一个日期列表,这里可以使用 posexplode() 函数,比如说我们想要 [2022-12-01, 2022-12-31] 的日期列表,具体实现如下:

select date_add('2022-12-01', pos) as curr_date
from (
select posexplode(split(space(datediff('2022-12-31', '2022-12-01')), ' ')) as (pos, val)
) t;
  • 1
  • 2
  • 3
  • 4

函数解释:

  • posexplode:posexplode(ARRAY<T> a),与 explode 类似,行转列函数,只不过是多了个 pos 列用来记录序号,序号从 0 开始。
    官方解释:将数组分解为多行,并带有 int 类型的附加位置列(原始数组中项的位置,从 0 开始)。返回包含两列 (pos,val) 的行集,数组中的每个元素各占一行。
  • split:split(string str, string pat),切割函数,将字符串 str 按照 pat 进行拆分(pat 是正则表达式)。
  • space:space(int n),返回n个空格的字符串。
  • datediff:datediff(string enddate, string startdate),日期相减,返回从开始日期到结束日期的天数:datediff(‘2009-03-01’, ‘2009-02-27’) = 2。
    函数详细信息及用法可去 Hive官网 了解。

二、日期维度的求解

上述日期列表有了之后,具体日期维度的求解相对来说就比较简单了,各个维度的具体求解如下:

  • 获取年
select year('2022-12-01 13:14:15');
  • 1
  • 获取月
select month('2022-12-01 13:14:15');
  • 1
  • 获取日
select day('2022-12-01 13:14:15');
  • 1
  • 获取时
select hour('2022-12-01 13:14:15');
  • 1
  • 获取分
select minute('2022-12-01 13:14:15');
  • 1
  • 获取秒
select second('2022-12-01 13:14:15');
  • 1
  • 当前时间是一年中的第几周
select weekofyear('2022-12-01 13:14:15');
  • 1
  • 所在周的第几天
--找一个星期一的日期,然后日期相减,取余,数字1-7分别代表星期一到星期日
select pmod(datediff('2022-12-01 13:14:15', '2018-01-01') + 1, 7);
--或者
--数字1-7分别代表星期一到星期日
select date_format('2022-12-01 13:14:15', 'u'); 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 当前日期所在周的下周周几的日期
    函数:next_day(string start_date, string day_of_week)
    day_of_week可以是星期一到星期日的英文或其缩写:Monday(Mon.)、Tuesday(Tue.)、Wednesday(Wed.)、Thursday(Thu.)、Friday(Fri.)、Saturday(Sat.)、Sunday(Sun.)
--当前日期所在周的下周周一的日期
select next_day('2022-12-01 13:14:15', 'Mon'); 
  • 1
  • 2
  • 所在周的周一日期
select date_sub(next_day('2022-12-01 13:14:15', 'Mon'), 7); 
  • 1
  • 所在周的周日日期
select date_sub(next_day('2022-12-01 13:14:15', 'Mon'), 1); 
  • 1
  • 所在月的第几天
select dayofmonth('2022-12-01 13:14:15');
  • 1
  • 所在月的第一天
    函数:trunc(string date, string format)
select trunc('2022-12-01 13:14:15', 'MM');
  • 1
  • 所在月的最后一天
select last_day('2022-12-01 13:14:15');
  • 1
  • 所在季度
select quarter('2022-12-01 13:14:15');
  • 1
  • 所在季度的第一天
select trunc(add_months('2022-12-05', -(month('2022-12-05') - 1) % 3), 'MM');
--Hive3中支持
select trunc('2022-12-05 13:14:15', 'Q');
  • 1
  • 2
  • 3
  • 所在季度的最后一天
    函数:pmod(INT a, INT b),pmod(DOUBLE a, DOUBLE b),返回 a 对 b 取余的绝对值(正值)。
select last_day(add_months('2022-12-05', pmod(3 - month('2022-12-05'), 3)));
  • 1

上述日期有的可以用 date_format() 函数实现,具体可参考之前文章:
Hive中date_format()函数的用法

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/675594
推荐阅读
相关标签
  

闽ICP备14008679号