数据流挖掘——窗口内的计数问题

转自:http://msdn.microsoft.com/zh-cn/library/ff518595(v=sql.105).aspx

计数窗口定义处于某个时间段内并且您可以对其执行某些基于集的计算(例如聚合)的事件的子级。计数窗口与快照窗口相似,也没有固定的窗口大小。它们由其包含的事件的数目定义。这可以实现多种方案,其中,基于集的操作必须应用于具有非定期事件频率的流中特定数目的事件。

提示 提示

在此版本的 StreamInsight 中,计数窗口只能用于用户定义聚合或用户定义运算符,不能用于内置聚合和 TopK。

有关事件窗口及其在 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

var agg = from w in inputStream.CountByStartTimeWindow(10)
          select new { sum = w.MySum(e => e.i) };

因为计数窗口当前不能用于内置聚合,所以上例假定用户定义聚合 MySum。

与任何其他窗口一样,此窗口输出策略应用于基于数据集的操作的结果。针对计数窗口的唯一可用输出策略是在窗口的末尾生成一个点事件。点时间的时间戳与窗口中最后一个事件的开始时间一致。换言之,点事件仍处于窗口范围内。在应用上图的输入的聚合后,输出流如下所示:

具有聚合结果的计数窗口。

对于时间敏感的用户定义运算符 (UDO)(其中,UDO 可生成包括时间戳的结果事件),时间戳由输出策略覆盖。UDO 返回的每个事件都在窗口末尾转换为一个点事件,这样,该点将与窗口中最后一个事件的开始时间一致,就像来自某个聚合的单个结果事件,如前一关系图所示。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值