Sql 如何去规范化范围并将其存储在数据仓库中?
我的自定义web服务器以挂钟时间戳(会话开始)和会话持续时间的秒数的形式报告会话信息 我希望将这些信息存储在数据仓库(MySQL+start模式)中,以允许我在特定时间查询特定实体的会话数。一个要求是,我们必须能够提取时间序列数据,这些数据将被馈送到图形中Sql 如何去规范化范围并将其存储在数据仓库中?,sql,data-warehouse,Sql,Data Warehouse,我的自定义web服务器以挂钟时间戳(会话开始)和会话持续时间的秒数的形式报告会话信息 我希望将这些信息存储在数据仓库(MySQL+start模式)中,以允许我在特定时间查询特定实体的会话数。一个要求是,我们必须能够提取时间序列数据,这些数据将被馈送到图形中 除了为会话的每一秒插入一行之外,还有其他方法存储数据吗?我认为最简单的方法是在事实表中使用StartTime和EndTime为每个会话存储一行 假设我们有factSession: ( ... ,SessionID int
除了为会话的每一秒插入一行之外,还有其他方法存储数据吗?我认为最简单的方法是在事实表中使用StartTime和EndTime为每个会话存储一行 假设我们有
factSession
:
(
...
,SessionID int
,StartTime datetime
,EndTime datetime
,EntityID int
...
) ;
及
你可以:
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
选择t.TimePoint
,f.EntityID
,将(f.SessionID)计数为cnt
从TimeSeries作为t
左键将factSessions连接为f ON(f.StartTime为每个会话存储一行,其中一列表示实体id,一列表示“会话开始”,一列表示“会话持续的wall cl[o]ck秒数”(或者更容易查询:会话结束),这有什么不对?您可以在查询数据时将其转换为另一种形式。@马克:因为我真的不知道如何聚合此类记录并从中生成时间序列数据。有指针吗?效果很好。是否对约700行的timeseries表和约350000行的事实表进行了测试。即使我试图限制会话表中的行数。是否有办法对此进行优化?我在开始和停止时间中添加了一个索引,但没有获得任何结果。下面是对查询的解释;
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