这篇文章主要介绍了Hive常用日期函数有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。
select current_timestamp-- 2020-12-05 19:16:29.284
SELECT current_date; ## OR SELECT current_date(); -- 2020-12-05
SELECT UNIX_TIMESTAMP();-- 1524884881
select substr(current_timestamp, 0, 10);-- current_timestamp
select date_sub(current_date, 1);--2020-12-04
select to_date("2017-10-22 10:10:10");-- 2017-10-22 select date_format("2017-10-22" "yyyy-MM")-- 2017-10
select datediff("2017-10-22", "2017-10-12");-- 10select datediff("2017-10-22 10:10:10", "2017-10-12 23:10:10");-- 10select datediff("2017-10-22 01:10:10", "2017-10-12 23:10:10");-- 10
select from_unixtime(cast(substr("1504684212155", 0,10) as int)) dt;-- 2017-09-06 15:50:12
语法: to_date(string timestamp)
select to_date(from_unixtime(UNIX_TIMESTAMP()));-- 2018-04-28select FROM_UNIXTIME(UNIX_TIMESTAMP(),'yyyy-MM-dd 10:30:00');- 2018-04-28 10:30:00select concat(date_sub(current_date,1),' 20:30:00');-- 2018-04-27 20:30:00-- hive version 1.2.0select date_format(date_sub(current_date,1),'yyyy-MM-dd 20:30:00');
注意:原始日期格式只支持两种:yyyy-MM-dd yyyy-MM-dd HH:mm:ss
否则都需要date_format
来转
date_addnext_day
有一个活跃会员表,每天分区维度是会员id,可以用device_id来代替,问怎么计算最近七天连续三天活跃会员数,其中表(dws.dws_member_start_day
)结构如下表(dt是分区,日期格式yyyy-MM-dd,每个分区有唯一device_id
):
device_id string dt string
1.首先思考可以用到的日期函数datediff, date_sub/date_add
2.连续日期,连续问题都会用到一个排名函数,但是排名函数的值是数值,要与日期的连续性做到映射,才方便分组,比如可以把日期映射到连续数字,或者数字映射到连续日期,实现这两个的操作就是通过前面的datedff 和 date_sub组合,原理就是日期与日期相减即可得到连续整数,整数随便与某个日期做相减即可得到连续的日期,其中date_sub可以是反向排序得到连续日期。
3.通过连续的排序日期或者排序id相减,然后分组即可解决此类问题
SELECT device_id, dt, row_number() over(PARTITION BY device_id ORDER BY dt) roFROM dws.dws_member_start_day
-- 2.1 序号转为连续日期SELECT device_id, dt, datediff(dt, date_add('2020-07-20', row_number() over(PARTITION BY device_id ORDER BY dt))) gidFROM dws.dws_member_start_day -- 2.2 日期转为连续序号SELECT device_id, dt, (datediff(dt, '2020-07-21') - row_number() over(PARTITION BY device_id ORDER BY dt)) gidFROM dws.dws_member_start_day
SELECT device_id,count(1)FROM (SELECT device_id, dt, datediff(dt, date_add('2020-07-20', row_number() over(PARTITION BY device_id ORDER BY dt))) gid FROM dws.dws_member_start_day WHERE datediff(dt, CURRENT_DATE) BETWEEN -7 AND 7 ) tmpGROUP BY device_id, gidHAVING count(1) < 3
感谢你能够认真阅读完这篇文章,希望小编分享的“Hive常用日期函数有哪些”这篇文章对大家有帮助,同时也希望大家多多支持亿速云,关注亿速云行业资讯频道,更多相关知识等着你来学习!
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。
原文链接:https://my.oschina.net/u/3735317/blog/4966641