Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何去规范化范围并将其存储在数据仓库中?_Sql_Data Warehouse - Fatal编程技术网

Sql 如何去规范化范围并将其存储在数据仓库中?

Sql 如何去规范化范围并将其存储在数据仓库中?,sql,data-warehouse,Sql,Data Warehouse,我的自定义web服务器以挂钟时间戳(会话开始)和会话持续时间的秒数的形式报告会话信息 我希望将这些信息存储在数据仓库(MySQL+start模式)中,以允许我在特定时间查询特定实体的会话数。一个要求是,我们必须能够提取时间序列数据,这些数据将被馈送到图形中 除了为会话的每一秒插入一行之外,还有其他方法存储数据吗?我认为最简单的方法是在事实表中使用StartTime和EndTime为每个会话存储一行 假设我们有factSession: ( ... ,SessionID int

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

我希望将这些信息存储在数据仓库(MySQL+start模式)中,以允许我在特定时间查询特定实体的会话数。一个要求是,我们必须能够提取时间序列数据,这些数据将被馈送到图形中


除了为会话的每一秒插入一行之外,还有其他方法存储数据吗?

我认为最简单的方法是在事实表中使用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