Esper系列(十)NamedWindow語法delete、Select+Delete、Update
阿新 • • 發佈:2019-01-27
On-Delete With Named Windows
功能:在Named Windows中刪除事件.
格式:
1 | onevent_type[(filter_criteria)][asstream_name] |
2 | deletefromwindow_or_table_name[asstream_name] |
3 | [wherecriteria_expression] |
說明:
Criteria_expression為刪除事件的條件.
例子:
1 | //構造window |
2 | Stringnwsql="createwindowmyWindow.win:keepall()asorderEvent"; |
3 | EPStatementnwstate=epAdmin.createEPL(nwsql); |
4 | //想window中插入事件 |
5 | Stringinsql="insertintomyWindowselect*fromorderEvent"; |
6 | EPStatementinstate=epAdmin.createEPL(insql); |
7 | //delete |
8 | Stringepsql="onorderBean(value>50)asobdeletefrommyWindowasmwwheremw.salary=111"; |
Triggered Select+Delete: the On Select Delete clause
功能:從named window查詢出結果的同時刪掉查詢結果.
格式:
1 | //構造window |
2 | Stringnwsql="createwindow |
3 | EPStatementnwstate=epAdmin.createEPL(nwsql); |
4 | //向windwo中插入事件 |
5 | Stringinsql="insertintomyWindowselect*fromorderEvent"; |
6 | EPStatementinstate=epAdmin.createEPL(insql); |
7 | //select+delete |
8 | Stringepsql="onorderBean(value>50)asobselectanddelete*frommyWindowasmwwheremw.salary=111"; |
注意:最後執行的查詢加刪除EPL中,刪除的是mw.salary=111中的orderBean事件和myWindow中的事件.
On-Update With Named Windows
功能:更新window中事件.
格式:
1 | onevent_type[(filter_criteria)][asstream_name] |
2 | updatewindow_or_table_name[asstream_name] |
3 | setmutation_expression[,mutation_expression[,...]] |
4 | [wherecriteria_expression] |
例一:
1 | //建立window |
2 | Stringnwsql="createwindowmyWindow.win:keepall()asorderBean"; |
3 | EPStatementnwstate=epAdmin.createEPL(nwsql); |
4 | //向window中插入資料 |
5 | Stringinsql="insertintomyWindowselect*fromorderBean"; |
6 | EPStatementinstate=epAdmin.createEPL(insql); |
7 | //更新操作 |
8 | Stringepsql="onorderEvent(salary>0)asoeupdatemyWindowasmwsetmw.key=\"chenx\",mw.value=100wheremw.value=111"; |
9 | EPStatementepstate=epAdmin.createEPL(epsql); |
功能:
當orderEvent 事件中的salary屬性大於零,將myWindow中事件屬性value值為111修改為100,並將key修改為 chenx。
說明:
1、在Window的update操作中,orderBean事件必須實現Serializable介面;
2、orderBean事件的屬性必須要可寫,且不能存在巢狀屬性(Map、List等);
3、XML格式的事件不能通過此語句更新
例二:
1 | //更新操作 |
2 | Stringepsql="onorderEvent(salary>0)asoeupdatemyWindowasmwsetmw.key=\"chenx\",mw.value=100whereoe.salary=111"; |
3 | EPStatementepstate=epAdmin.createEPL(epsql); |
功能:這個更新語句與上一個更新語句差別在於where的條件判讀不同,當orderEvent事件中的salary大於0且等於111的時候,將myWindow中的所有事件的key屬性修改為 chenx,value屬性修改為100。
例三:
1 | onUpdateEventasupd |
2 | updateMyWindowaswin |
3 | setfield_a=1, |
4 | field_b=win.field_a, |
5 | field_c=initial.field_a |
說明:
field_a被更新為1,然後用修改後的field_a賦值給field_b,那麼field_b實際上也變成1了。但是如果想用更新前的field_a的值賦給field_c,那麼就要寫成initial.field_a。initial是關鍵字,所以不能省略。