我正在尝试撰写可以回答以下问题的HiveQL
(或甚至ANSI SQL
)查询:
我有一个包含事件(事务)的数据库,每个事件都存储有user_id
和trans_time
(事务时间)。 user_id
可以包含无限制的事件,甚至可以使多个事件具有相同的trans_time
。
如果我建立一个活动时间窗口(即10秒),那个窗口中有多少个窗口有多少个事件?我认为结果会是这样的(显然没有文字,只是数字)......
100个窗口只有1个事件
50个窗口有2个事件
。
。
1个窗口,有30个事件
描述第一个结果......数据集中有100个实例,在10秒窗口内只发生了1个事件。
有没有办法从相同的数据中提取另一个指标,
50个user_ids只有1个事件
25个user_ids有2个事件
。
。
1个user_id有30个事件
描述第一个结果......在10秒窗口内有50个user_id只有1个事件。
我希望这不是太模糊。一如既往,谢谢!!
答案 0 :(得分:1)
如果你的窗户是静止的,例如:
窗口1 - 12:00:00 - 12:00:09
窗口2 - 12:00:10 - 12:00:19等。
你可以这样做:
-- this counts number of windows per with same number of events
select events_in_window,count(*) windows
from (
-- this counts events in each window
select window ,count(*) events_in_window
from (
-- this rounds all the transactions to windows
select user_id,from_unixtime(floor(unix_timestamp(trans_time)/10)*10) window
from table) a
group by window) b
group by events_in_window
注意" 10"在trans_time"舍入"。您可以将其更改为您需要的任何大小的窗口。