SQL - 会话计数和会话之间的事务
SQL - Count of Sessions and transactions between session
我正在尝试编写一个 HiveQL
(甚至 ANSI SQL
)可以回答以下问题的查询:
我有一个包含事件(交易)的数据库,每个事件都存储有一个 user_id
和一个 trans_time
(交易时间)。一个 user_id
可以有无限个事件,甚至可以有多个具有相同 trans_time
.
的事件
如果我建立一个 activity window 的时间(即 10 秒),那么在 window 中有多少个 windows 有多少个事件?我想结果会是这样的(显然没有文字,只有数字)...
100 windows 只有 1 个事件
50 windows 有 2 个事件
.
.
1 window 有 30 个事件
描述第一个结果...数据集中有 100 个实例,其中 10 秒内只发生了一个事件 window。
有没有办法从相同的数据中提取另一个指标,说,
50 user_ids 只有 1 个事件
25 user_ids 有 2 个事件
.
.
1 user_id 有 30 个事件
描述第一个结果...有 50 个 user_ids 在 10 秒内只有一个事件 window。
我希望这不是太模糊。一如既往,谢谢!!
如果您的 windows 是静态的,例如:
window 1 - 12:00:00 - 12:00:09
window 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
注意 trans_time "rounding" 中的“10”。您可以将其更改为您需要的 windows 的任何大小。
我正在尝试编写一个 HiveQL
(甚至 ANSI SQL
)可以回答以下问题的查询:
我有一个包含事件(交易)的数据库,每个事件都存储有一个 user_id
和一个 trans_time
(交易时间)。一个 user_id
可以有无限个事件,甚至可以有多个具有相同 trans_time
.
如果我建立一个 activity window 的时间(即 10 秒),那么在 window 中有多少个 windows 有多少个事件?我想结果会是这样的(显然没有文字,只有数字)...
100 windows 只有 1 个事件
50 windows 有 2 个事件
.
.
1 window 有 30 个事件
描述第一个结果...数据集中有 100 个实例,其中 10 秒内只发生了一个事件 window。
有没有办法从相同的数据中提取另一个指标,说,
50 user_ids 只有 1 个事件
25 user_ids 有 2 个事件
.
.
1 user_id 有 30 个事件
描述第一个结果...有 50 个 user_ids 在 10 秒内只有一个事件 window。
我希望这不是太模糊。一如既往,谢谢!!
如果您的 windows 是静态的,例如:
window 1 - 12:00:00 - 12:00:09
window 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
注意 trans_time "rounding" 中的“10”。您可以将其更改为您需要的 windows 的任何大小。