• 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是关键字,所以不能省略。

  • 相关阅读:
    验证码处理 -- 爬虫
    Django知识点总结
    关于sql去重
    tsxt-01
    崔老师爬取top100的源码(会403)
    简单爬取网页源码
    爬取猫眼top100
    python-自动发邮件
    python-装饰器
    Python 爬虫基础Selenium库的使用
  • 原文地址:https://www.cnblogs.com/jianyuan/p/5028601.html
Copyright © 2020-2023  润新知