Esper系列(十三)Splitting and Duplicating Streams
功能:将同一个事件流分发到其它的事件流中。
格式:
| 1 | [context context_name] |
| 2 | on event_type[(filter_criteria)] [as stream_name] |
| 3 | insert into insert_into_def select select_list [where condition] |
| 4 | [insert into insert_into_def select select_list [where condition]] |
| 5 | [insert into...] |
| 6 | [output first | all] |
格式说明:
1、event_type:条件触发事件,filter_criteria为过滤条件,stream_name为事件别名;
2、insert子句:多个子句用空格分割开;
3、output first: 表示从第一个insert句子开始到最后一个,基础事件依次匹配其where条件,只要满足了某一个,那么插入到对应的事件流以后,这个基础事件就不再有机会和之后的where进行匹配,即不会再进入之后的事件流中,(默认模式);
4、output all: 表示基础事件和所有的insert句子的where进行匹配,能满足的就进入对应的事件流,即不会像first那样限制基础事件只能被输入到某一个流中;
5、select子句和where子句不能用聚合函数;
示例:
文件名:orderMainTest.java
| 1 | public class orderMainTest { |
| 2 | |
| 3 | public static void main(String[] args) throws InterruptedException { |
| 4 | |
| 5 | // 添加配置(包所在路劲),方面后面的引用自动添加包名前缀 |
| 6 | Configuration config = new Configuration(); |
| 7 | config.addEventTypeAutoName("cn.chenx.esper.split"); |
| 8 | |
| 9 | // |
| 10 | EPServiceProvider epServiceProvider = EPServiceProviderManager |
| 11 | .getDefaultProvider(config); |
| 12 | EPAdministrator epAdmin = epServiceProvider.getEPAdministrator(); |
| 13 | |
| 14 | // 创建window |
| 15 | String nwsql1 = "create window myWindow1.win:keepall() as (name String)"; |
| 16 | String nwsql2 = "create window myWindow2.win:keepall() as (name String)"; |
| 17 | String nwsql4 = "create window myWindow4.win:keepall() as (size int)"; |
| 18 | String nwsql5 = "create window myWindow5.win:keepall() as (size int)"; |
| 19 | // first |
| 20 | String insql1 = "insert into myWindow1 select key as name "; |
| 21 | String insql2 = "insert into myWindow2 select key as name where value=111 "; |
| 22 | String insql3 = "on orderBean "+ insql2 + insql1 + " "; |
| 23 | // all |
| 24 | String insql4 = "insert into myWindow4 select value as size "; |
| 25 | String insql5 = "insert into myWindow5 select value as size where value=111 "; |
| 26 | String insql6 = "on orderBean "+ insql4 + insql5 + " output all "; |
| 27 | // select |
| 28 | String stsql1 = "select * from myWindow1"; |
| 29 | String stsql2 = "select * from myWindow2"; |
| 30 | String stsql4 = "select * from myWindow4"; |
| 31 | String stsql5 = "select * from myWindow5"; |
| 32 | |
| 33 | System.out.println("first: " +insql3); |
| 34 | System.out.println("output: "+insql6); |
| 35 | // |
| 36 | epAdmin.createEPL(nwsql1); |
| 37 | epAdmin.createEPL(nwsql2); |
| 38 | epAdmin.createEPL(nwsql4); |
| 39 | epAdmin.createEPL(nwsql5); |
| 40 | |
| 41 | epAdmin.createEPL(insql3); |
| 42 | epAdmin.createEPL(insql6); |
| 43 | // |
| 44 | EPRuntime epRuntime = epServiceProvider.getEPRuntime(); |
| 45 | // |
| 46 | for (int i = 0; i < 10; i++) { |
| 47 | int seed = (int) (Math.random() * 100); |
| 48 | if (i > 4) |
| 49 | seed = 111; |
| 50 | else |
| 51 | seed = seed+1; |
| 52 | |
| 53 | orderBean b = new orderBean("hello World"+i,seed); |
| 54 | if (9 == i){ |
| 55 | b.setValue(110); |
| 56 | } |
| 57 | |
| 58 | System.out.println("key:"+b.getKey()+",value:"+b.getValue()); |
| 59 | epRuntime.sendEvent(b); |
| 60 | } |
| 61 | |
| 62 | |
| 63 | System.out.println("start Name Window select"); |
| 64 | EPOnDemandQueryResult sResult1=epRuntime.executeQuery(stsql1); |
| 65 | printResult(stsql1,sResult1); |
| 66 | EPOnDemandQueryResult sResult2=epRuntime.executeQuery(stsql2); |
| 67 | printResult(stsql2,sResult2); |
| 68 | EPOnDemandQueryResult sResult4=epRuntime.executeQuery(stsql4); |
| 69 | printResult(stsql4,sResult4); |
| 70 | EPOnDemandQueryResult sResult5=epRuntime.executeQuery(stsql5); |
| 71 | printResult(stsql5,sResult5); |
| 72 | } |
| 73 | |
| 74 | static public void printResult(String content,EPOnDemandQueryResult result){ |
| 75 | System.out.println("\n" + content); |
| 76 | EventBean[] events = result.getArray(); |
| 77 | for (int i = 0; i < events.length; i++) { |
| 78 | EventBean event = events[i]; |
| 79 | System.out.println(event.getUnderlying()); |
| 80 | } |
| 81 | } |
| 82 | } |

浙公网安备 33010602011771号