网站建设资讯

NEWS

网站建设资讯

Hive常用日期函数有哪些

这篇文章主要介绍了Hive常用日期函数有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

创新互联建站专注于企业营销型网站、网站重做改版、木垒哈萨克网站定制设计、自适应品牌网站建设、H5高端网站建设商城网站建设、集团公司官网建设、成都外贸网站建设、高端网站制作、响应式网页设计等建站业务,价格优惠性价比高,为木垒哈萨克等各大城市提供网站开发制作服务。

1.当前日期和时间

select current_timestamp
-- 2020-12-05 19:16:29.284 
   

2.获取当前日期,当前是 2020-12-05

SELECT current_date; 
## OR 
SELECT current_date(); 
-- 2020-12-05 
   

3.获取unix系统下的时间戳

SELECT UNIX_TIMESTAMP();
-- 1524884881 
   

4.当前是 2020-12-05

select substr(current_timestamp, 0, 10);
-- current_timestamp 
   

5.当前是 2020-12-05

select date_sub(current_date, 1);
--2020-12-04 
   

6.yyyy-MM-dd HH:MM:ss 截取日期

select to_date("2017-10-22 10:10:10");
-- 2017-10-22 
select date_format("2017-10-22" "yyyy-MM")
-- 2017-10 
   

7.两个日期之间的天数差

select datediff("2017-10-22", "2017-10-12");
-- 10
select datediff("2017-10-22 10:10:10", "2017-10-12 23:10:10");
-- 10
select datediff("2017-10-22 01:10:10", "2017-10-12 23:10:10");
-- 10 
   

8.时间截取

select from_unixtime(cast(substr("1504684212155", 0,10) as int)) dt;
-- 2017-09-06 15:50:12 
   

9.时间戳转日期

语法: to_date(string timestamp)

select to_date(from_unixtime(UNIX_TIMESTAMP()));
-- 2018-04-28
select FROM_UNIXTIME(UNIX_TIMESTAMP(),'yyyy-MM-dd 10:30:00');
- 2018-04-28 10:30:00
select concat(date_sub(current_date,1),' 20:30:00');
-- 2018-04-27 20:30:00
-- hive version 1.2.0
select date_format(date_sub(current_date,1),'yyyy-MM-dd 20:30:00'); 
   

10.日期增加

注意:原始日期格式只支持两种:yyyy-MM-dd yyyy-MM-dd HH:mm:ss否则都需要date_format来转

date_add
next_day 
   

11. 附加题

有一个活跃会员表,每天分区维度是会员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相减,然后分组即可解决此类问题

 
1.在原表基础上增加一列排序序号
SELECT device_id,
       dt,
       row_number() over(PARTITION BY device_id
                         ORDER BY dt) ro
FROM dws.dws_member_start_day

   
2.将序号转为连续日期,或者把日期转为连续数字,后成为gid
-- 2.1 序号转为连续日期
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 

-- 2.2 日期转为连续序号
SELECT device_id,
    dt,
    (datediff(dt, '2020-07-21') - row_number() over(PARTITION BY device_id
        ORDER BY dt)) gid
FROM dws.dws_member_start_day 
   
3.分组筛选
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 ) tmp
GROUP BY device_id,
    gid
HAVING count(1) < 3  

感谢你能够认真阅读完这篇文章,希望小编分享的“Hive常用日期函数有哪些”这篇文章对大家有帮助,同时也希望大家多多支持创新互联,关注创新互联行业资讯频道,更多相关知识等着你来学习!


网页题目:Hive常用日期函数有哪些
转载源于:http://njwzjz.com/article/iiogdc.html