你能在 RDBMS 中会话化网络日志吗
Can you Sessionize Weblogs in an RDBMS
只是一个一般性问题。您可以在 RDBMS 中会话化日志吗?
例如,假设您只有三列 1) 时间戳 2) URL 3) UserID 是否可以在传统 RDBMS 中根据 activity 的 X 分钟对日志进行会话化。输出可能看起来像四列 1) timestamp 2) URL 3) UserID 4)SessionID.
我假设不是,但想听听其他人的意见。
谢谢
这有点棘手,但可以使用嵌套的窗口聚合函数来完成,例如
SELECT timestamp, UserID, URL,
SUM(newSession) -- cumulative sum over 0/1
OVER (PARTITION BY UserId
ORDER BY timestamp
ROWS UNBOUNDED PRECEDING) AS SessionID
FROM
(
SELECT
ts_col, UserID, URL,
-- calculate the timestamp difference between current and previous row
CASE WHEN timestamp - LAG(timestamp)
OVER (PARTITION BY UserId
ORDER BY timestamp) > INTERVAL 'X minutes'
THEN 1 -- new session starts
ELSE 0 -- part of the old session
END AS newSession
) AS dt
一些 DBMS(例如 Vertica 和 Aster)支持使用内置函数进行会话,在其他数据库中,您可能会实现用户定义的函数。
只是一个一般性问题。您可以在 RDBMS 中会话化日志吗?
例如,假设您只有三列 1) 时间戳 2) URL 3) UserID 是否可以在传统 RDBMS 中根据 activity 的 X 分钟对日志进行会话化。输出可能看起来像四列 1) timestamp 2) URL 3) UserID 4)SessionID.
我假设不是,但想听听其他人的意见。
谢谢
这有点棘手,但可以使用嵌套的窗口聚合函数来完成,例如
SELECT timestamp, UserID, URL,
SUM(newSession) -- cumulative sum over 0/1
OVER (PARTITION BY UserId
ORDER BY timestamp
ROWS UNBOUNDED PRECEDING) AS SessionID
FROM
(
SELECT
ts_col, UserID, URL,
-- calculate the timestamp difference between current and previous row
CASE WHEN timestamp - LAG(timestamp)
OVER (PARTITION BY UserId
ORDER BY timestamp) > INTERVAL 'X minutes'
THEN 1 -- new session starts
ELSE 0 -- part of the old session
END AS newSession
) AS dt
一些 DBMS(例如 Vertica 和 Aster)支持使用内置函数进行会话,在其他数据库中,您可能会实现用户定义的函数。