zoukankan      html  css  js  c++  java
  • 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是关键字,所以不能省略。

  • 相关阅读:
    Java多线程-ThreadLocal和InheritableThreadLocal的使用
    Java多线程-join的使用
    VsCode配置让 ts 文件自动编译为 js文件
    npm和yarn更改依赖包全局下载和缓存路径
    npm和yarn更改淘宝镜像
    Java多线程-管道流实现线程间通信
    Java多线程-生产者/消费者模式实现
    Java多线程-使用 wait / notify 实现线程间的通信
    Java多线程-volatile关键字
    Java多线程-synchronized(非this对象)
  • 原文地址:https://www.cnblogs.com/jianyuan/p/5028601.html
Copyright © 2011-2022 走看看