【原创】StreamInsight查询系列(三)——基本查询操作之过滤

上篇博文介绍了如何在LINQPad中输出StreamInsight查询结果。这篇文章将主要介绍StreamInsight基础查询操作中的过滤部分。

测试数据准备

为了方便测试查询,我们首先准备一个静态的测试数据源:

var weatherData = new[]
{new { Timestamp = new DateTime(2010, 1, 1, 0, 00, 00), Temperature = -9.0, StationCode = 71395, WindSpeed = 4}, new { Timestamp = new DateTime(2010, 1, 1, 0, 30, 00), Temperature = -4.5, StationCode = 71801, WindSpeed = 41},new { Timestamp = new DateTime(2010, 1, 1, 1, 00, 00), Temperature = -8.8, StationCode = 71395, WindSpeed = 6}, new { Timestamp = new DateTime(2010, 1, 1, 1, 30, 00), Temperature = -4.4, StationCode = 71801, WindSpeed = 39},new { Timestamp = new DateTime(2010, 1, 1, 2, 00, 00), Temperature = -9.7, StationCode = 71395, WindSpeed = 9}, new { Timestamp = new DateTime(2010, 1, 1, 2, 30, 00), Temperature = -4.6, StationCode = 71801, WindSpeed = 59},new { Timestamp = new DateTime(2010, 1, 1, 3, 00, 00), Temperature = -9.6, StationCode = 71395, WindSpeed = 9},
};

weatherData代表了一系列的天气信息(时间戳、温度、气象站编码以及风速)。

接下去将weatherData转变为点类型复杂事件流:

var weatherStream = weatherData.ToPointStream(Application,t => PointEvent.CreateInsert(t.Timestamp, t),AdvanceTimeSettings.IncreasingStartTime);// 统计事件总数
weatherStream.ToPointEnumerable().Count().Dump("Total number of events");

细心的读者会发现事件总数是15,而不是weatherData的元素个数7。这是因为在使用AdvanceTimeSettings.IncreasingStartTime标志创建weatherStream后,StreamInsight引擎会为每一个事件后紧跟一个相同时间戳的CTI事件,因此事件个数为7*2=14。那么为什么总数变成了15呢?那是因为AdvanceTimeSettings.IncreasingStartTime默认指定了AdvanceToInfinityOnShutdown为true,即确定在关闭查询时应插入具有正无穷大的时间戳的最终CTI,用来刷新所有剩余事件。因此加上这个正无穷大的CTI事件,总的事件总数为15。感兴趣的读者可以调用weatherStream.ToPointEnumerable().Dump() 查看15个事件的具体内容。

基础过滤

问题1:怎样过滤事件流以保留特定的事件?

对weatherStream过滤可以使用LINQ中的where子句,如保留那些温度高于零下5度的事件:

var filterQuery = from e in weatherStreamwhere e.Temperature > -5.0select e;

接下去使用下述语句将filterQuery中的Insert事件导出到LINQPad输出窗口:

(from e in filterQuery.ToPointEnumerable()where e.EventKind == EventKind.Insertselect e).Dump();

最终的3个过滤事件结果如下:

问题2:怎样进行多条件过滤?

StreamInsight支持多条件过滤,只需要在where子句中指明多个过滤条件即可。问题1中我们过滤出了温度高于零下5度的所有事件;那么如果我们想要过滤出不仅温度高于零下5度,而且风速超过40的事件,该怎么做呢?很简单,只需要在where子句中增加e.WindSpeed > 40就可以了,如下:

var filterQuery2 = from e in weatherStreamwhere e.Temperature > -5.0 && e.WindSpeed > 40select e;
(from e in filterQuery2.ToPointEnumerable()where e.EventKind == EventKind.Insertselect e).Dump();

最终过滤出的2个事件如下:

下篇文章将介绍StreamInsight基础操作操作中的聚合部分。

转载于:https://www.cnblogs.com/StreamInsight/archive/2011/08/21/StreamInsight-Query-Series-Part3-Basic-Queries-Filters.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/462517.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

设计模式之四(抽象工厂模式第二回合)

前言 在第一回合中留下的问题,http://www.cnblogs.com/aehyok/archive/2013/05/19/3087497.html,现在就先处理一个简单的,只添加一个Department表。 第二回合 首先要建立部门类,假设只有两个字段部门ID,和部门名称。 p…

第一章-起步

1、安装python3环境 windows: 到python官网下载python3安装包,下载地址:https://www.python.org/ftp/python/3.7.3/python-3.7.3-amd64.exe 双击安装运行即可,注意:需要勾选add python 3.7 to path linux: …

ASP.NET 4.0升级至ASP.NET 4.5需要注意的地方

原文 http://www.cnblogs.com/dudu/archive/2013/05/20/3087791.html 原以为只要在Visual Studio 2012中将每个项目的Target framework设置为.NET Framewor 4.5进行编译,然后在web.config中设置compilation的targetFramework为4.5,就升级到了ASP.NET 4.5…

chrome扩展之3:一步步跟我学开发一个表单填写扩展

这节课实现的效果如下图所示: 我们先想一想,怎么样才可以在搜索框上输入内容呢,当然可以手动输入^_^,除了这个之外呢?如果您有这个页面的后台编辑权限就可以直接修改这个页面的内容。当然,这个页面是google的,我们没有…

mysql 重置root密码

myini文件增加命令 (1)在my.ini文件的[mysqld]块下增加“skip_grant_tables”,然后重启mysql服务,再以管理员权限打开cmd执行一些列命令重置密码 mysql> use mysql;Database changedmysql> update user set authentication_…

[读书笔记]TCP/IP详解V1读书笔记-3

IP: 无连接:数据报到达没有先后顺序,处理先后发送的数据报之间没有关联。 不可靠:数据报丢失后没有处理,简单向源地址发送 ----------------------------- ---------------------------------- 网络字节序:…

CAL(1)

为什么80%的码农都做不了架构师?>>> CAL(1) BSD General Commands Manual CAL(1) NAME cal - displays a calendar SYNOPSIS cal [-smjy13] [[[day] month] year] DESCRIPTION Cal displays a simple calendar. If arguments …

vbox虚拟机配置Redhat6.4本地yum源

作为一个新手,配置这个yum源配了4天,遇到了各种问题,也按照网络上面一些方法在163上面下载CentOS6的yum源来替换Redhat本地的yum源,但是配置过程中,出现很多错误,发现直接在本地配置yum源会更便捷一点&…

美化系统

作为一个有强迫症都人,对系统都美化一定要做的!优雅都环境总给人带来美好都心情! 今天参照http://www.linuxidc.com/提供都方法着实把Ubuntu美化了了一下,尤其是shell终端,非常合适俺都口味! 上图 转载于:h…

毕业两年返校随想

就西安这个伤心之地我竟然可以连续呆上一周,真是难得。不过还好,有书看,在接连三天且比以前上研时还高的频率出现在母校的自习室后,我发现,原来我是如此地喜欢大学校园。 我全无要抢占“道德制高点”的意思&#xff0…

创建单IP的***网络

一、架构1.1现有网络现有网络架构如图一所示,其中服务器网段为192.168.0.x使用专门线路接入internet,192.168.88.x为网络设备网段,其它都是办公网段使用另外的线路接入internet。图一、现有网络结构图1.2 ***架构在图一所示的网络架构中搭建一…

为Java应用程序加上退出事件处理(ShutdownHook)

ShutdownHook 是这样一个概念:向虚拟机注册一个线程,当程序退出(CtrlC)时虚拟机会启动这个线程,我们可以在这个线程的run()中做一些清除的工作,如:释放数据库连接,关闭文件等. 注册: Runtime.getRuntime().addShutdownHook(Thread t); 注销: Runtime.get…

烂泥:利用Diskgen找回分区破坏前的资料

本文首发于烂泥行天下,由秀依林枫提供友情赞助。呵呵,好久没有写过博客了。看看时间上一篇博客应该是在一个月之前发布的,最近事情比较多大部分时间都是在出差。自己对技术也没有什么研究的,就说说这次项目中碰到的一个有关数据恢…

40幅非常精美的字体艺术作品欣赏(上篇)

这篇文章和大家分享40幅非常精美的字体艺术作品。字体原来也可以设计得这么美,真是不可思议,一起欣赏吧。 Computer Arts Magazine by Steven Bonner Tangled Handmade Font by Katya Belkina Typo Graphic Design by Andrei D. Robu Peace by Piece Fon…

mysql设置不区分大小写

mysql设置不区分大小写 1.windows下 到安装mysql的目录,修改my.ini文件 在文件最后一行加上下面一句话 lower_case_table_names1 lower_case_table_names 1说明 0:区分大小写,1:不区分大小写 效果如下 [mysqld] port 3306 b…

k8s 组件介绍-API Server

API Server简介 k8s API Server提供了k8s各类资源对象(pod,RC,Service等)的增删改查及watch等HTTP Rest接口,是整个系统的数据总线和数据中心。 kubernetes API Server的功能: 提供了集群管理的REST API接口(包括认证授权、数据校…

分布式版本控制系统入门

简介 在过去几年,对于分布式版本控制可以给开发过程提供的益处有许多争论。最近,分布式工具已经很成熟了。尽管分布式工具的一些优点最初可能不明显,但是从长期来看,它们提供的灵活性是非常有意义的。阅读完本文之后,您…

Hadoop源生实用工具之distcp

1 概览 DistCp(Distributed Copy)是用于大规模集群内部或者集群之间的高性能拷贝工具。 它使用Map/Reduce实现文件分发,错误处理和恢复,以及报告生成。 它把文件和目录的列表作为map任务的输入,每个任务会完成源列表中…

如何使用spy ++ (How to use Spy ++)

一个网友在我的一篇随笔后问道,如何使用spy 查找要用到的窗体类名以及相关信息 现把相关作法整理如下 如果你装了vs.net,在vs.net的工具里面就可以看到spy 打开spy ,会以树状图显示当前系统所有的窗体信息,如下所示 然后找到…

PL/SQL Developer 9 注册机

软件下载:下载 注册机下载:下载 说明:测试版本--9.0.1.1613(无需替换文件,输入注册信息即可) 附图: 转载于:https://www.cnblogs.com/zhanqi/archive/2011/10/12/2208750.html