您可以在RDBMS中对Weblog进行会话

时间:2015-03-02 21:35:54

标签: sql database postgresql hadoop rdbms

只是一个普遍的问题。你能在RDBMS中对日志进行会话吗?

例如,假设您只有三列1)时间戳2)URL 3)UserID可以根据传统RDBMS中的X分钟活动来对日志进行会话化。输出可能看起来像四列1)时间戳2)URL 3)UserID 4)SessionID。

我认为不是,但想听别人的意见。

由于

1 个答案:

答案 0 :(得分:2)

这有点棘手,但可以使用嵌套的窗口聚合函数来完成,比如

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)支持使用内置函数进行会话,而在其他情况下,您可能会实现用户定义函数。