Flink - flinksql使用TIMESTAMPDIFF遇到的问题

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

先说需求:计算今日复访用户数,要求该用户前3天内有访问该直播间的记录

需求分析:

  1. 如何确定前3天内有访问,这份数据我是通过离线同学帮忙每天凌晨更新的,存在的误差也在接受范围之内。
  2. 今天的访客需要从之前的记录中判断是否有近3天的。
  3. 统计uv

数据处理:

  1. 同步用户最近一次访问直播间的时间,userLastVisitRoomTime,记录用户最近一次访问直播间的时间,这个表是T+1(离线数据,只有今日00:00:00的数据)的。
  2. 使用flinksql进行join该表,该表中userId + roomId 有索引。
  3. 若没有访问记录,可以任务是新客户,无需统计
  4. 若有访问记录,拉取最近访问时间进行判断。
  5. 复访用户进行统计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

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值