1. 程式人生 > >Esper系列(十)NamedWindow語法delete、Select+Delete、Update

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

On-Delete With Named Windows

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

格式:

onevent_type[(filter_criteria)][asstream_name]
deletefromwindow_or_table_name[asstream_name]
[wherecriteria_expression]

說明:

Criteria_expression為刪除事件的條件.

例子:

//構造window
Stringnwsql="createwindowmyWindow.win:keepall()asorderEvent";
EPStatementnwstate=epAdmin.createEPL(nwsql);
//想window中插入事件
Stringinsql="insertintomyWindowselect*fromorderEvent";
EPStatementinstate=epAdmin.createEPL(insql);
//delete
Stringepsql="onorderBean(value>50)asobdeletefrommyWindowasmwwheremw.salary=111";

Triggered Select+Delete: the On Select Delete clause

功能:從named window查詢出結果的同時刪掉查詢結果.

格式:

//構造window
Stringnwsql="createwindow
myWindow.win:keepall()asorderEvent";
EPStatementnwstate=epAdmin.createEPL(nwsql);
//向windwo中插入事件
Stringinsql="insertintomyWindowselect*fromorderEvent";
EPStatementinstate=epAdmin.createEPL(insql);
//select+delete
Stringepsql="onorderBean(value>50)asobselectanddelete*frommyWindowasmwwheremw.salary=111";

注意:最後執行的查詢加刪除EPL中,刪除的是mw.salary=111中的orderBean事件和myWindow中的事件.

On-Update With Named Windows

功能:更新window中事件.

格式:

onevent_type[(filter_criteria)][asstream_name]
updatewindow_or_table_name[asstream_name]
setmutation_expression[,mutation_expression[,...]]
[wherecriteria_expression]

例一:

//建立window
Stringnwsql="createwindowmyWindow.win:keepall()asorderBean";
EPStatementnwstate=epAdmin.createEPL(nwsql);
//向window中插入資料
Stringinsql="insertintomyWindowselect*fromorderBean";
EPStatementinstate=epAdmin.createEPL(insql);
//更新操作
Stringepsql="onorderEvent(salary>0)asoeupdatemyWindowasmwsetmw.key=\"chenx\",mw.value=100wheremw.value=111";
EPStatementepstate=epAdmin.createEPL(epsql);

功能:

當orderEvent 事件中的salary屬性大於零,將myWindow中事件屬性value值為111修改為100,並將key修改為 chenx。

說明:
1、在Window的update操作中,orderBean事件必須實現Serializable介面;
2、orderBean事件的屬性必須要可寫,且不能存在巢狀屬性(Map、List等);
3、XML格式的事件不能通過此語句更新

例二:

//更新操作
Stringepsql="onorderEvent(salary>0)asoeupdatemyWindowasmwsetmw.key=\"chenx\",mw.value=100whereoe.salary=111";
EPStatementepstate=epAdmin.createEPL(epsql);

功能:這個更新語句與上一個更新語句差別在於where的條件判讀不同,當orderEvent事件中的salary大於0且等於111的時候,將myWindow中的所有事件的key屬性修改為 chenx,value屬性修改為100。

例三:

onUpdateEventasupd
updateMyWindowaswin
setfield_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是關鍵字,所以不能省略。