sql—会话之间会话和事务的计数

vyswwuz2  于 2021-05-30  发布在  Hadoop
关注(0)|答案(1)|浏览(408)

我想写一本书 HiveQL (甚至 ANSI SQL )可以回答以下问题的查询:
我有一个带有事件(事务)的数据库,每个事件都用 user_id 和一个 trans_time (事务时间)。一 user_id 可以有无限的事件,甚至可以有多个相同的事件 trans_time .
如果我建立一个活动时间窗口(即10秒),有多少个窗口在该窗口中有多少个事件?我想结果会是这样的(显然没有文字,只有数字)。。。
100个窗口只有一个事件
50个窗口有2个事件
.
.
一个有30个事件的窗口
为了描述第一个结果…数据集中有100个示例,在10秒的时间窗口内只有1个事件发生。
有没有办法从相同的数据中提取另一个指标,即50个用户id只有一个事件
25个用户ID有2个事件
.
.
1个用户id有30个事件
为了描述第一个结果…有50个用户ID在10秒内只有一个事件。
我希望这不是太模糊。一如既往,谢谢你!!

cigdeys3

cigdeys31#

如果您的窗口是静态的,例如:
窗口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”。你可以把它改成你需要的任何大小的窗口。

相关问题