如果时间间隔很小,则对事件进行聚集的sql计数

yi0zb3m4  于 2021-06-26  发布在  Hive
关注(0)|答案(1)|浏览(374)

我正在尝试使用配置单元计算数据集中发生了多少次“使用”。
我的数据中有各个用户id、unix历元时间的时间戳、事件名称和事件长度(以秒为单位)的列。
用户触发事件的任何时候都会考虑“使用”。问题是,如果一个用户触发一个事件,然后在五分钟内触发另一个事件,我将被算作相同的“使用”
我很难在脑子里想清楚如何计算5分钟的计算时间。我似乎无法像在sql中那样在hive中创建一堆“create tables”,以避免过多的子查询,因为我很容易在这些子查询中迷失方向。
这似乎是一个标准问题,有没有一个聪明或明显的解决方案来处理这样的项目?
谢谢您

krcsximq

krcsximq1#

在 hive 里,你可以用 lag() 在给定的记录前5分钟看是否还有另一个记录。如果没有,则将标志设置为1并计算:

select count(*)
from (select t.*,
             lag(timestamp) over (partition by user order by timestamp) as prev_timestamp
      from t
     ) t
where prev_timestamp is null or
      (timestamp - prev_timestamp) > 5*60;

相关问题