先说需求:计算今日复访用户数,要求该用户前3天内有访问该直播间的记录
需求分析:
- 如何确定前3天内有访问,这份数据我是通过离线同学帮忙每天凌晨更新的,存在的误差也在接受范围之内。
- 今天的访客需要从之前的记录中判断是否有近3天的。
- 统计uv
数据处理:
- 同步用户最近一次访问直播间的时间,userLastVisitRoomTime,记录用户最近一次访问直播间的时间,这个表是T+1(离线数据,只有今日00:00:00的数据)的。
- 使用flinksql进行join该表,该表中userId + roomId 有索引。
- 若没有访问记录,可以任务是新客户,无需统计
- 若有访问记录,拉取最近访问时间进行判断。
- 复访用户进行统计uv
看似简单的逻辑,遇到了一个小问题
userLastVisitRoomTime 表中,最近访问时间(last_visit_time)的类型为bigint,即秒级时间戳。一开始写sql时,使用了TIMESTAMPDIFF方法
TIMESTAMPDIFF(DAY,last_visit_time,current_datetime) < 4
错误的理解: last_time_visit 和 current_datetime 相差的天数,比如 2021-02-21 12:00:00 和 2021-02-22 08:00:00 相差一天。
测试数据的时候发现,并没有这么简单呀。相差的天数对不上,比如我在2021-0

本文讲述了在使用FlinkSQL处理数据时遇到的一个关于时间戳转换为日期差的问题。作者发现在使用TIMESTAMPDIFF计算秒级时间戳与当前时间差时,结果并不符合预期。经过排查,发现DAY单位实际上是以24小时为一天计算的,而非自然日。这个问题在特定时间点(如跨天的边界)表现得尤为明显。最终,作者修正了理解并解决了问题。
最低0.47元/天 解锁文章
1138

被折叠的 条评论
为什么被折叠?



