你能在 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)支持使用内置函数进行会话,在其他数据库中,您可能会实现用户定义的函数。