Esper系列(六)子查询、Exists、In/not in、Any/Some、Join
子查询
1 | >= all (select salary from orderEvent.win:length_batch(5))"; |
注意:
运行以上三个例句后的结果,刚开始让很费解(对调试代码不做说明),因为win:length_batch(5))对子查询与外部查询中的产生的效果不一样导致。
以以上应用场景为例:
外部查询事件缓存在之前的Context节中有详细说明;
子查询缓存更新可理解为每次积累到5个事件流才会更新子查询事件缓存,超过5个将重新积累计数,;
满足输出需要两个条件:
- 子查询中缓存的事件个数需要5个.
- 子查询中缓存的事件中存在salary值符合条件的;
Join
格式:
1 | 事件A 关键字(inner join、full outer join、left outer join、right outer join) 事件B on 事件连接条件 |
Inner join
默认的join方式,必须等到所有的join事件都到才能输出.
例句:
1 | String epsql = "select * from orderEvent.std:lastevent(),orderBean.std:lastevent() "; |
注:std:lastevent()必须加,不然报Joins require that at least one view is specified for each stream的错误.
Full outer join
1、两个事件不同时到达:不管事件输出的条件是否满足,当有事件到达时就输出.
2、两个事件同时达到:当条件满足,输出满足条件的数据;当条件不满足,输出,两个事件各输出一次.
例句:
1 | String epsql = "select * from orderEvent.std:lastevent() as oe full outer join orderBean.std:lastevent() as ob on oe.salary=ob.value"; |
left outer join
关键字左边的事件到达时,不管条件是否满足都会输出,关键字右边的事件只有在满足join条件时才可以输出.
例句:
1 | String epsql = "select * from orderEvent.std:lastevent() as oe left outer join orderBean.std:lastevent() as ob on oe.salary=ob.value"; |
1、right outer join与left outer join功能相反,在事件连接过程中,前后两个事件先后到达时,前到达的会被单独执行,但执行后事件缓存与内存中,与后到的事件会再次一起执行;
2、std:lastevent()对事件的修饰有缓存的作用;
3、以上四种事件连接可以多种混合使用;
Unidirectional Join
关键字unidirectional作用于修饰需要连接的事件,使被修饰的事件在连接执行过程中不缓存(无状态).
例句:
1 | String epsql = "select * from orderEvent as oe unidirectional full outer join orderBean.std:lastevent() as ob on oe.salary=ob.value"; |
1、在一个执行语句中unidirectional只能修饰一个事件;
2、使用了unidirectional修饰的事件流就不能再用data window或者view修饰了(它们之间是互斥);
3、用unidirectional修饰的事件流,不能通过esper的查询api查出来,因为该事件流是无状态的,不会暂存在引擎中;
最新文章
- POJ 1061 同余方程
- input file上传文件扩展名限制
- DataSet筛选数据然后添加到新的DataSet中引发的一系列血案
- android内嵌入webview导致闪退
- ECharts案例教程1
- C# 二进制字节流查找函数IndexOf
- 添加线标注ILineElement
- 怎样在delphi中实现控件的拖拽
- (转)iOS Wow体验 - 第六章 - 交互模型与创新的产品概念(1)
- C#基础知识-数据类型(一)
- 201521123009《Java程序设计》第3周学习总结
- 【NOI2010】海拔【平面图最小割】
- python爬虫项目(scrapy-redis分布式爬取房天下租房信息)
- 利用git提交代码
- hashCode相关性能优化
- nw.js的localStorage的物理储存位置
- kepware http接口 php
- Java接口多线程并发测试 (二)
- 图片预加载 js css预加载
- Mybatis常见面试题 三
热门文章
- Django初体验
- 利用数据库链做DML操作时报ORA-02069: global_names parameter must be set to TRUE for this operation
- 在C#中IEnumerable与IEnumerator
- BZOJ 3713: [PA2014]Iloczyn
- C# winform 弹出输入框
- 1842-A. Broj
- 介绍一个超好用的HICHARTS扩展插件
- [Gauss]POJ1830 开关问题
- Java 单链表逆序
- Delphi GDI+基本用法总结