【原创】StreamInsight查询系列(七)——基本查询操作之基础排序
2011-08-23 10:08
567 查看
上篇博文介绍了StreamInsight基础查询操作中的分组聚合部分。这篇文章将主要介绍如何StreamInsight查询中的基础排序(TopK)。
weatherData代表了一系列的天气信息(时间戳、温度、气象站编码以及风速)。
接下去将weatherData转变为点类型复杂事件流:
放在上面的例子中,我们可以把问题转变为“怎样找出每4个小时内平均温度最高的事件?”。要解决这个问题,要用到一个复合查询,首先使用翻转窗口TumblingWindow固定4小时,而后在这个4小时内的时间窗口内按照温度进行排序(orderby)。代码如下:
LINQPad中的结果如下:
问题2:怎样每隔2小时的计算过去4小时的两个最小值事件?
与问题1较为类似,这里是group..by子句与跳跃窗口HoppingWindow之间的组合。
LINQPad输出结果如下:
下一篇将介绍StreamInsight基础查询操作中的分组排序(TopK)部分。
测试数据准备
为了方便测试查询,我们首先准备一个静态的测试数据源:var weatherData = new[] { new { Timestamp = new DateTime(2010, 1, 1, 0, 00, 00, DateTimeKind.Utc), Temperature = -9.0, StationCode = 71395, WindSpeed = 4}, new { Timestamp = new DateTime(2010, 1, 1, 0, 30, 00, DateTimeKind.Utc), Temperature = -4.5, StationCode = 71801, WindSpeed = 41}, new { Timestamp = new DateTime(2010, 1, 1, 1, 00, 00, DateTimeKind.Utc), Temperature = -8.8, StationCode = 71395, WindSpeed = 6}, new { Timestamp = new DateTime(2010, 1, 1, 1, 30, 00, DateTimeKind.Utc), Temperature = -4.4, StationCode = 71801, WindSpeed = 39}, new { Timestamp = new DateTime(2010, 1, 1, 2, 00, 00, DateTimeKind.Utc), Temperature = -9.7, StationCode = 71395, WindSpeed = 9}, new { Timestamp = new DateTime(2010, 1, 1, 2, 30, 00, DateTimeKind.Utc), Temperature = -4.6, StationCode = 71801, WindSpeed = 59}, new { Timestamp = new DateTime(2010, 1, 1, 3, 00, 00, DateTimeKind.Utc), Temperature = -9.6, StationCode = 71395, WindSpeed = 9}, };
weatherData代表了一系列的天气信息(时间戳、温度、气象站编码以及风速)。
接下去将weatherData转变为点类型复杂事件流:
var weatherStream = weatherData.ToPointStream(Application, t => PointEvent.CreateInsert(t.Timestamp, t), AdvanceTimeSettings.IncreasingStartTime);
基础排序
问题1:怎样找出每4个小时内的最大值事件?放在上面的例子中,我们可以把问题转变为“怎样找出每4个小时内平均温度最高的事件?”。要解决这个问题,要用到一个复合查询,首先使用翻转窗口TumblingWindow固定4小时,而后在这个4小时内的时间窗口内按照温度进行排序(orderby)。代码如下:
var topKQuery = (from win in weatherStream .TumblingWindow(TimeSpan.FromHours(4), HoppingWindowOutputPolicy.ClipToWindowEnd) from e in win orderby e.Temperature descending select e).Take(1);
LINQPad中的结果如下:
问题2:怎样每隔2小时的计算过去4小时的两个最小值事件?
与问题1较为类似,这里是group..by子句与跳跃窗口HoppingWindow之间的组合。
var topKQuery2 = (from win in weatherStream .HoppingWindow(TimeSpan.FromHours(4), TimeSpan.FromHours(2), HoppingWindowOutputPolicy.ClipToWindowEnd) from e in win orderby e.Temperature ascending select e).Take(2);
LINQPad输出结果如下:
下一篇将介绍StreamInsight基础查询操作中的分组排序(TopK)部分。
相关文章推荐
- 【原创】StreamInsight查询系列(八)——基本查询操作之分组排序
- 【原创】StreamInsight查询系列(九)——基本查询操作之决胜排序
- 【原创】StreamInsight查询系列(六)——基本查询操作之分组聚合
- 【原创】StreamInsight查询系列(四)——基本查询操作之聚合
- 【原创】StreamInsight查询系列(三)——基本查询操作之过滤
- 【原创】StreamInsight查询系列(五)——基本查询操作之用户自定义聚合
- 【原创】StreamInsight查询系列(十)——基本查询操作之联接
- 【原创】StreamInsight查询系列(十三)——查询模式之基本模式
- 【原创】StreamInsight查询系列(二十二)——查询模式之持续更新
- 【原创】StreamInsight查询系列(二十)——查询模式之检测间隙事件
- 【原创】StreamInsight查询系列(二十一)——查询模式之使用地理数据
- 【原创】StreamInsight查询系列(十四)——查询模式之相异计数
- 【原创】StreamInsight查询系列(一)——准备工作
- 【原创】StreamInsight查询系列(十八)——查询模式之趋势发现
- 【原创】StreamInsight查询系列(十六)——查询模式之左外联接
- java mongodb 基础系列---查询,排序,limit,$in,$or,输出为list,创建索引,$ne 非操作
- 【原创】StreamInsight查询系列(十五)——查询模式之窗口比率
- 【原创】StreamInsight查询系列(十七)——查询模式之应对瞬变及报警泛滥
- 【原创】StreamInsight查询系列(十九)——查询模式之检测异常
- 【原创】StreamInsight查询系列(十一)——查询模式之窗口对齐