如何对范围进行非规范化并将它们存储在数据仓库中?

时间:2010-01-01 19:10:47

标签: sql data-warehouse

我的自定义Web服务器以挂钟时间戳(会话开始)和会话持续时间的墙点击秒数的形式报告会话信息。

我希望以一种允许我在特定时间查询特定实体的会话数的方式将此信息存储在数据仓库(MySQL +启动模式)中。要求是我们必须能够提取将被提供给图表的时间序列数据。

有没有其他方法来存储数据,而不是为会话的每一个绝对秒插入一行?

1 个答案:

答案 0 :(得分:0)

我想说最简单的方法是在事实表中使用StartTime,EndTime为每个会话存储一行。

假设我们factSession有:

  ( 
   ...
  ,SessionID int
  ,StartTime datetime
  ,EndTime datetime
  ,EntityID int
   ...
  ) ;

TimeSeries TABLE ( TimePoint datetime ) ;

你可以:

SELECT  t.TimePoint
       ,f.EntityID
       ,COUNT(f.SessionID) AS cnt
FROM    TimeSeries AS t
        LEFT JOIN factSessions AS f ON ( f.StartTime <= t.TimePoint
                                          AND t.TimePoint <= f.EndTime
                                        )
GROUP BY t.TimePoint ,f.EntityID
ORDER BY t.TimePoint