Esper系列(十)NamedWindow语法delete、Select+Delete、Update

On-Delete With Named Windows

功能:在Named Windows中删除事件.

格式:

on event_type[(filter_criteria)] [as stream_name]
delete from window_or_table_name [as stream_name]
[where criteria_expression]

说明:

Criteria_expression为删除事件的条件.

例子:

// 构造window
String nwsql = "create window myWindow.win:keepall() as orderEvent";
EPStatement nwstate = epAdmin.createEPL(nwsql);
// 想window中插入事件
String insql = "insert into myWindow select * from orderEvent";
EPStatement instate = epAdmin.createEPL(insql);
// delete 
String epsql = "on orderBean (value>50) as ob delete from myWindow as mw where mw.salary=111";

Triggered Select+Delete: the On Select Delete clause

功能:从named window查询出结果的同时删掉查询结果.

格式:

// 构造window
String nwsql = "create window myWindow.win:keepall() as orderEvent";
EPStatement nwstate = epAdmin.createEPL(nwsql);
// 向windwo中插入事件
String insql = "insert into myWindow select * from orderEvent";
EPStatement instate = epAdmin.createEPL(insql);
// select+delete
String epsql = "on orderBean (value>50) as ob select and delete * from myWindow as mw where mw.salary=111";

注意:最后执行的查询加删除EPL中,删除的是mw.salary=111中的orderBean事件和myWindow中的事件.

On-Update With Named Windows

功能:更新window中事件.

格式:

on event_type[(filter_criteria)] [as stream_name]
update window_or_table_name [as stream_name]
set mutation_expression [, mutation_expression [,...]]
[where criteria_expression]

例一:

// 创建window
String nwsql = "create window myWindow.win:keepall() as orderBean";
EPStatement nwstate = epAdmin.createEPL(nwsql);
// 向window中插入数据
String insql = "insert into myWindow select * from orderBean";
EPStatement instate = epAdmin.createEPL(insql);
// 更新操作
String epsql = "on orderEvent(salary>0) as oe update myWindow as mw set mw.key="chenx",mw.value=100 where mw.value=111 ";
EPStatement epstate = epAdmin.createEPL(epsql);

功能:

当orderEvent 事件中的salary属性大于零,将myWindow中事件属性value值为111修改为100,并将key修改为 chenx。

说明:
1、在Window的update操作中,orderBean事件必须实现Serializable接口;
2、orderBean事件的属性必须要可写,且不能存在嵌套属性(Map、List等);
3、XML格式的事件不能通过此语句更新

例二:

// 更新操作
String epsql = "on orderEvent(salary>0) as oe update myWindow as mw set mw.key="chenx",mw.value=100 where oe.salary=111 ";
EPStatement epstate = epAdmin.createEPL(epsql);

功能:这个更新语句与上一个更新语句差别在于where的条件判读不同,当orderEvent事件中的salary大于0且等于111的时候,将myWindow中的所有事件的key属性修改为 chenx,value属性修改为100。

例三:

on UpdateEvent as upd  
update MyWindow as win  
set field_a = 1,  
field_b = win.field_a, 
field_c = initial.field_a 

说明:

field_a被更新为1,然后用修改后的field_a赋值给field_b,那么field_b实际上也变成1了。但是如果想用更新前的field_a的值赋给field_c,那么就要写成initial.field_a。initial是关键字,所以不能省略。

原文地址:https://www.cnblogs.com/jianyuan/p/5028601.html