SQL - 会话之间的会话和事务计数

时间:2015-06-28 04:24:28

标签: sql session hadoop hive hiveql

我正在尝试撰写可以回答以下问题的HiveQL(或甚至ANSI SQL)查询:

我有一个包含事件(事务)的数据库,每个事件都存储有user_idtrans_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个事件。

我希望这不是太模糊。一如既往,谢谢!!

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"舍入"。您可以将其更改为您需要的任何大小的窗口。