数据流挖掘——窗口内的计数问题
2013-08-19 15:27
141 查看
转自:http://msdn.microsoft.com/zh-cn/library/ff518595(v=sql.105).aspx
计数窗口定义处于某个时间段内并且您可以对其执行某些基于集的计算(例如聚合)的事件的子级。计数窗口与快照窗口相似,也没有固定的窗口大小。它们由其包含的事件的数目定义。这可以实现多种方案,其中,基于集的操作必须应用于具有非定期事件频率的流中特定数目的事件。
有关事件窗口及其在 StreamInsight 中的实现和用法的一般性说明,请参阅使用事件窗口。
了解计数窗口
计数窗口的可变窗口大小由沿时间线的不同事件开始时间的计数确定。计数为 N 的计数窗口集定义为包含 N 个连续事件开始时间的所有时间范围,其中 N 至少为 1。更准确地讲,每个此类时间范围都以开始时间加上第 N 个不同事件的一个时钟周期来结束。计数窗口沿具有每个不同事件开始时间的时间线移动。因此,只要满足计数,定义新事件开始时间的每个新事件都将导致创建新的计数窗口。也就是说,只要不同事件开始时间的数目小于 N,就不创建新窗口。与跳跃窗口一样,计数窗口之间的偏移量称作跳跃大小;但与跳跃窗口不同的是,一般来讲,计数窗口的跳跃大小将不固定。
如果时间线上的每个事件都有唯一时间戳,则每个此类窗口中事件的数目将等于 N。如果多个事件具有相同的事件开始时间,则包含的事件的数目将高于 N。在将聚合应用于该窗口时理解此行为是十分重要的。
下图显示了一个包含三个事件(e1、e2 和 e3)的流。竖线表示这些事件定义的计数窗口边界。浅蓝色的事件流表示事件流随时间的移动。橙色框显示计数窗口以及每个窗口中包含的事件。前两个不同事件开始时间属于 e1 和 e2,并且第一个计数窗口跨越相应的期间,以 e1 的开始时间开始,以 e2 的开始时间加上一个时钟周期结束。第二个窗口包含 e2 和 e3 的开始时间:
请注意,此图说明已按照窗口输入策略剪辑的窗口中的事件。对于所有 StreamInsight 窗口,输入策略是将事件剪辑到窗口大小。对时间敏感的聚合或运算符将在窗口中使用这些已剪辑的事件生存期,而非使用原始的事件生存期。
下图显示具有点事件的计数窗口,这些点事件仅对单个时间实例有效。这进一步阐释了 CountByStartTimeWindow() 方法对不同的事件开始时间进行计数,而非对事件本身进行计数。该图说明点事件流。竖线表示这些点事件定义的计数窗口开始时间。浅蓝色的事件流表示事件流随时间的移动。请注意,两个事件同时并置。橙色框显示计数窗口以及每个窗口中包含的事件。就窗口参数 N 而言,这两个并置的事件作为一个单位计数。
对于点事件,在定义窗口结束时间时该窗口向第 N 个事件的开始时间加上一个时钟周期的行为将导致窗口完全包括其所有事件。
定义计数窗口
计数窗口由沿时间线的不同事件开始时间的计数定义。计数窗口在语言集成查询 (LINQ) 中指定,如下例所示。输入策略始终为 ClipToWindow,输出策略始终为PointAlignToWindowEnd。
因为计数窗口当前不能用于内置聚合,所以上例假定用户定义聚合 MySum。
与任何其他窗口一样,此窗口输出策略应用于基于数据集的操作的结果。针对计数窗口的唯一可用输出策略是在窗口的末尾生成一个点事件。点时间的时间戳与窗口中最后一个事件的开始时间一致。换言之,点事件仍处于窗口范围内。在应用上图的输入的聚合后,输出流如下所示:
对于时间敏感的用户定义运算符 (UDO)(其中,UDO 可生成包括时间戳的结果事件),时间戳由输出策略覆盖。UDO 返回的每个事件都在窗口末尾转换为一个点事件,这样,该点将与窗口中最后一个事件的开始时间一致,就像来自某个聚合的单个结果事件,如前一关系图所示。
计数窗口定义处于某个时间段内并且您可以对其执行某些基于集的计算(例如聚合)的事件的子级。计数窗口与快照窗口相似,也没有固定的窗口大小。它们由其包含的事件的数目定义。这可以实现多种方案,其中,基于集的操作必须应用于具有非定期事件频率的流中特定数目的事件。
提示 |
---|
在此版本的 StreamInsight 中,计数窗口只能用于用户定义聚合或用户定义运算符,不能用于内置聚合和 TopK。 |
了解计数窗口
计数窗口的可变窗口大小由沿时间线的不同事件开始时间的计数确定。计数为 N 的计数窗口集定义为包含 N 个连续事件开始时间的所有时间范围,其中 N 至少为 1。更准确地讲,每个此类时间范围都以开始时间加上第 N 个不同事件的一个时钟周期来结束。计数窗口沿具有每个不同事件开始时间的时间线移动。因此,只要满足计数,定义新事件开始时间的每个新事件都将导致创建新的计数窗口。也就是说,只要不同事件开始时间的数目小于 N,就不创建新窗口。与跳跃窗口一样,计数窗口之间的偏移量称作跳跃大小;但与跳跃窗口不同的是,一般来讲,计数窗口的跳跃大小将不固定。
如果时间线上的每个事件都有唯一时间戳,则每个此类窗口中事件的数目将等于 N。如果多个事件具有相同的事件开始时间,则包含的事件的数目将高于 N。在将聚合应用于该窗口时理解此行为是十分重要的。
下图显示了一个包含三个事件(e1、e2 和 e3)的流。竖线表示这些事件定义的计数窗口边界。浅蓝色的事件流表示事件流随时间的移动。橙色框显示计数窗口以及每个窗口中包含的事件。前两个不同事件开始时间属于 e1 和 e2,并且第一个计数窗口跨越相应的期间,以 e1 的开始时间开始,以 e2 的开始时间加上一个时钟周期结束。第二个窗口包含 e2 和 e3 的开始时间:
请注意,此图说明已按照窗口输入策略剪辑的窗口中的事件。对于所有 StreamInsight 窗口,输入策略是将事件剪辑到窗口大小。对时间敏感的聚合或运算符将在窗口中使用这些已剪辑的事件生存期,而非使用原始的事件生存期。
下图显示具有点事件的计数窗口,这些点事件仅对单个时间实例有效。这进一步阐释了 CountByStartTimeWindow() 方法对不同的事件开始时间进行计数,而非对事件本身进行计数。该图说明点事件流。竖线表示这些点事件定义的计数窗口开始时间。浅蓝色的事件流表示事件流随时间的移动。请注意,两个事件同时并置。橙色框显示计数窗口以及每个窗口中包含的事件。就窗口参数 N 而言,这两个并置的事件作为一个单位计数。
对于点事件,在定义窗口结束时间时该窗口向第 N 个事件的开始时间加上一个时钟周期的行为将导致窗口完全包括其所有事件。
定义计数窗口
计数窗口由沿时间线的不同事件开始时间的计数定义。计数窗口在语言集成查询 (LINQ) 中指定,如下例所示。输入策略始终为 ClipToWindow,输出策略始终为PointAlignToWindowEnd。
var agg = from w in inputStream.CountByStartTimeWindow(10) select new { sum = w.MySum(e => e.i) };
因为计数窗口当前不能用于内置聚合,所以上例假定用户定义聚合 MySum。
与任何其他窗口一样,此窗口输出策略应用于基于数据集的操作的结果。针对计数窗口的唯一可用输出策略是在窗口的末尾生成一个点事件。点时间的时间戳与窗口中最后一个事件的开始时间一致。换言之,点事件仍处于窗口范围内。在应用上图的输入的聚合后,输出流如下所示:
对于时间敏感的用户定义运算符 (UDO)(其中,UDO 可生成包括时间戳的结果事件),时间戳由输出策略覆盖。UDO 返回的每个事件都在窗口末尾转换为一个点事件,这样,该点将与窗口中最后一个事件的开始时间一致,就像来自某个聚合的单个结果事件,如前一关系图所示。
相关文章推荐
- 数据流基本问题--独立元素计数(一)
- 社交网络图挖掘4--三角形计数问题
- 数据流基本问题--独立元素计数(二)
- Windows 原生 cmd 窗口下编译 C++(cl命令)出现的问题及解决方法
- MFC 进程和新进程主窗口特性问题
- OSG与OPENGL分别绘制同一个应用的两个窗口的问题
- css通用小笔记03——浏览器窗口变小 div错位的问题
- DOS命令行窗口mysql中文显示乱码问题解决方法
- 用VS创建一个win32窗口,编译运行都可以,但那个窗口没有显示出来(孙鑫老师第一课问题)
- javascript弹出窗口问题总结
- NOIP2013-普及组复赛-第一题-计数问题
- asp.net关于模式窗口刷新问题
- 解决自定义jquery模态窗口插件,无法在顶层窗口问题
- 蓝桥杯C语言培训3 典型问题的递归框架 例题4 组合计数(元素可以相同)
- 修复吾爱OD数据窗口双击不出现偏移问题
- c# 窗口句柄问题(转)
- swing中在JTextPane中的输入窗口出现乱码的问题
- window.open()窗口,窗口刷新问题
- 解决Bootstrap模态窗口Modal中使用Kindeditor或UEditor编辑器第二次无法加载的问题
- Velocity中 #foreach时velocityCount计数不起作用的问题。