我正在尝试计算使用HIVE在我的数据集中发生了多少'使用'。
我的数据中包含各个用户ID的列,unix纪元时间中的时间戳,事件名称和事件长度(以秒为单位)。
每次用户触发事件时都会考虑使用“使用”。问题是如果用户触发事件然后在五分钟内触发另一个事件,我将被视为相同的“使用”在计算时,我很难在精神上弄清楚如何计算五分钟的窗口。我似乎无法在HIVE中制作一堆“创建表格”,就像我在SQL中乱七八糟地避免过多的子查询一样,因为我很容易迷失在那些中。
这似乎是一个标准问题,处理这类物品是否有明智或明显的解决方案?
谢谢
答案 0 :(得分:1)
在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;