Esper系列(十三)Splitting and Duplicating Streams

功能:将同一个事件流分发到其它的事件流中。

格式:

[context context_name]
on event_type[(filter_criteria)] [as stream_name]
insert into insert_into_def select select_list [where condition]
[insert into insert_into_def select select_list [where condition]]
[insert into...]
[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

public class orderMainTest {
 
    public static void main(String[] args) throws InterruptedException {
 
        // 添加配置(包所在路劲),方面后面的引用自动添加包名前缀
        Configuration config = new Configuration();
        config.addEventTypeAutoName("cn.chenx.esper.split");
       
        //
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  }

你可能感兴趣的:(Esper系列(十三)Splitting and Duplicating Streams)