当前位置:   article > 正文

Flink - flinksql使用TIMESTAMPDIFF遇到的问题_flink sql timestampdiff

flink sql timestampdiff

先说需求:计算今日复访用户数,要求该用户前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-02-22 21:39:10 时,测试 2021-02-20 00:00:00 到目前是1天相差,是对的,为了测试时区问题,我测试了 2021.02.21 23:59:00 的数据发现相差天数变成了 0 .......

是不是很奇怪,这和我理解的出现了偏差。

一开始以为是时区问题,使用 flinksql-client 测试几个小sql,发现时区问题也是正常解决的,那么问题出现在哪里???

看了下官方文档

此处为什么会拿 10:00:00 到次日 10:00:00 举例?

莫非这个 "DAY" 的度量是24小时?1440分钟?86400秒?

那就要验证下这个想法了,最后发现还真是。。。

 

 

 

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/533447
推荐阅读
相关标签
  

闽ICP备14008679号