hive 1.1.0版本 获取周数, 解决跨年的bug

背景

项目中有一个报表是留存率,包括日留存,周留存,月留存。其中在计算周留存率时,可能会直接想到【weekofyear】这个函数,然后简单拼接年就可以得到周数,大部分时候是对的,但在跨年的时候可能会出现bug。

hive> select concat(year('2019-08-01'),'-',weekofyear('2019-08-01'));
OK
2019-31
Time taken: 3.217 seconds, Fetched: 1 row(s)

上面的结果一看也没啥问题,但如果选极端一点的日期,比如【2018-12-31】:

hive> select concat(year('2018-12-31'),'-',weekofyear('2018-12-31'));
OK
2018-1
Time taken: 0.09 seconds, Fetched: 1 row(s)

得到的结果明显是错误的,【2018-12-31】明显是2018年最后一天,却算出来的周数是【2018-1】(也就是2018年第一周),

上面例子可以引出一个问题,可能会出现一周跨年的情况,比如例子中的【2018-12-31】所在的周横跨了2018和2019年,那这周是属于2018还是2019年的呢?
当然,从上面结论来看,hive的【weekofyear】函数是把【20

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值