如果时间间隔很小,则计算事件聚集的事件

counting events where events are bunched if there is a small time gap

我正在尝试使用 HIVE 计算我的数据集中出现了多少 'Uses'。

我的数据中有个人用户 ID 列、unix 纪元时间戳、事件名称和事件长度(以秒为单位)。

'Use' 被认为是用户触发事件的任何时候。问题是,如果一个用户触发了一个事件,然后在五分钟内触发了另一个事件,我将算作相同的 'Use'

我在数数时脑子里很难弄清楚如何计算这五分钟 window。我似乎无法像我在 SQL 中乱七八糟地那样在 HIVE 中做一堆 'create tables' 以避免太多子查询,因为我很容易迷失在这些中。

这似乎是一个标准问题,是否有处理此类物品的明智或明显的解决方案?

谢谢

在 Hive 中,您可以使用 lag() 查看在给定记录之前五分钟是否有另一条记录。如果没有,则将标志设置为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;