【原创】StreamInsight查询系列(十二)——查询模式之事件对齐
2011-09-03 10:33
453 查看
上篇文章介绍了查询模式中窗口对齐部分,这篇博文将介绍事件对齐。
接下去将sourceIntervalDataType 转变为间隔类型复杂事件流:
改变事件生命期的函数其实大家在前面已经看到过一次,不错,就是AlterEventDuration!只不过它是延伸持续时间,并不能改变事件的起始时间。要解决问题1,需要使用另外一个改变生命期的函数——AlterEventLifeTime。
AlterEventLifeTime,顾名思义,就是更改事件的生命期,它既可以修改事件持续时间,也可以修改事件起始时间。在上面的代码中,前面部分指定开始时间为当天凌晨12点,后面部分指定了持续时间,即保证修改后的结束时间与前面保持一致。变更后的事件流结果如下:
问题2:怎样将事件移动/对齐到凌晨12点(即当天开始)且保持持续时间不变?
类似地,修改AlterEventLifeTime的第二个参数持续时间即可。代码如下:
输出结果如下:
下一篇将介绍StreamInsight查询模式中的基本模式部分。
测试数据准备
为了方便测试查询,我们首先准备一个静态的测试数据源:var sourceIntervalDataType = new [] { new { Id = "A", StartTime = DateTime.Parse("10/23/2009 11:59:01 PM"), EndTime = DateTime.Parse("10/23/2009 11:59:59 PM") }, new { Id = "A", StartTime = DateTime.Parse("10/23/2009 4:12:00 PM"), EndTime = DateTime.Parse("10/24/2009 4:12:01 PM") }, new { Id = "A", StartTime = DateTime.Parse("10/31/2009 11:59:59 PM"), EndTime = DateTime.Parse("11/1/2009 12:00:00 AM") }, new { Id = "A", StartTime = DateTime.Parse("11/1/2009 12:00:00 AM"), EndTime = DateTime.Parse("11/1/2009 12:00:00 PM") }, new { Id = "A", StartTime = DateTime.Parse("11/2/2009 12:00:01 AM"), EndTime = DateTime.Parse("11/2/2009 12:00:02 AM") }, new { Id = "A", StartTime = DateTime.Parse("11/3/2009 11:59:59 PM"), EndTime = DateTime.Parse("11/4/2009 12:00:01 AM") }, };
接下去将sourceIntervalDataType 转变为间隔类型复杂事件流:
var source = sourceIntervalDataType.ToIntervalStream(Application, ev => IntervalEvent.CreateInsert(ev.StartTime.ToLocalTime(), ev.EndTime.ToLocalTime(), new { ev.Id }), AdvanceTimeSettings.StrictlyIncreasingStartTime);
事件对齐
问题1:怎样将事件移动/对齐到凌晨12点(即当天开始)且保持结束时间不变?改变事件生命期的函数其实大家在前面已经看到过一次,不错,就是AlterEventDuration!只不过它是延伸持续时间,并不能改变事件的起始时间。要解决问题1,需要使用另外一个改变生命期的函数——AlterEventLifeTime。
var alignStream = source.AlterEventLifetime( e => e.StartTime.Date, e => e.EndTime - e.StartTime.Date);
AlterEventLifeTime,顾名思义,就是更改事件的生命期,它既可以修改事件持续时间,也可以修改事件起始时间。在上面的代码中,前面部分指定开始时间为当天凌晨12点,后面部分指定了持续时间,即保证修改后的结束时间与前面保持一致。变更后的事件流结果如下:
问题2:怎样将事件移动/对齐到凌晨12点(即当天开始)且保持持续时间不变?
类似地,修改AlterEventLifeTime的第二个参数持续时间即可。代码如下:
var alignStream = source.AlterEventLifetime( e => e.StartTime.Date, e => e.EndTime - e.StartTime);
输出结果如下:
下一篇将介绍StreamInsight查询模式中的基本模式部分。
相关文章推荐
- 【原创】StreamInsight查询系列(十一)——查询模式之窗口对齐
- 【原创】StreamInsight查询系列(二十)——查询模式之检测间隙事件
- 【原创】StreamInsight查询系列(十四)——查询模式之相异计数
- 【原创】StreamInsight查询系列(二十四)——查询模式之模式匹配
- 【原创】StreamInsight查询系列(十六)——查询模式之左外联接
- 【原创】StreamInsight查询系列(十七)——查询模式之应对瞬变及报警泛滥
- 【原创】StreamInsight查询系列(十五)——查询模式之窗口比率
- 【原创】StreamInsight查询系列(十九)——查询模式之检测异常
- 【原创】StreamInsight查询系列(二十二)——查询模式之持续更新
- 【原创】StreamInsight查询系列(十三)——查询模式之基本模式
- 【原创】StreamInsight查询系列(十八)——查询模式之趋势发现
- 【原创】StreamInsight查询系列(二十一)——查询模式之使用地理数据
- 【原创】StreamInsight查询系列(二十三)——查询模式之指数平滑法
- 【原创】StreamInsight查询系列(一)——准备工作
- 【原创】StreamInsight查询系列(十)——基本查询操作之联接
- 【原创】StreamInsight查询系列(二)——在LINQPad中输出查询结果
- 【原创】StreamInsight查询系列(八)——基本查询操作之分组排序
- 【原创】StreamInsight查询系列(四)——基本查询操作之聚合
- 【原创】StreamInsight查询系列(三)——基本查询操作之过滤
- 【原创】StreamInsight查询系列(六)——基本查询操作之分组聚合