• Esper系列(十四)Contained-Event Selection


    功能:该语法是针对所查询事件中的属性又是另一种属性的查询结果控制。

    格式:

    [select select_expressions from] 
      contained_expression [@type(eventtype_name)] [as alias_name]
      [where filter_expression]

    说明:

    该语法的重点在于contained_expression,这个表达式需要返回事件的属性,该属性可以是另一个事件也可以是普通数据类型,也可以是一组查询结果,比如一个数组,一个集合等等;

    示例:

    文件名:orderEvent.java

    public class orderEvent {
    //基本数据类型
    private String name;
    private int salary;
    private orderArray orderAry;
       
    public orderArray getOrderAry() {
        return orderAry;
        }
    10  public void setOrderAry(orderArray orderAry) {
    11      this.orderAry = orderAry;
    12  }
    13      ..........................
    14  }

    文件名:orderArray

    public class orderArray {
        private List<orderBean> orderBeans;
     
        public List<orderBean> getOrderBeans() {
            return orderBeans;
        }
     
        public void setOrderBeans(List<orderBean> orderBeans) {
            this.orderBeans = orderBeans;
    10      }
    11   
    12      @Override
    13      public String toString() {
    14          return "orderArray [orderBeans=" + orderBeans + "]";
    15      }
    16  }

    文件名: orderBean.java

    public class orderBean {
        private String key;
        private String value;
        private orderItem bean;
       
        // 各个字段对应的get和set方法
        //.............................
     
        @Override
    10      public String toString() {
    11          return "orderBean [key=" + key + ", value=" + value + ", bean=" + bean
    12                  + "]";
    13      }
    14  }

    文件名: orderItem.java

    public class orderItem {
        private String name;
        private String size;
       
        // 各属性字段对应的get和set方法
        //.................................
       
        @Override
        public String toString() {
    10          return "orderItem [name=" + name + ", size=" + size + "]";
    11      }
    12  }

    文件名: orderMainTest(程序入口)

    int i = 8;
    int seed = (int) (Math.random() * 100);
    orderEvent event = new orderEvent("", 100 + seed);
    System.out.println("seed name:" + event.getName() + ",salary:"
            + event.getSalary());
    orderBean bean = new orderBean();
    bean.setKey("BeanKey:" + i);
    bean.setValue("BeanValue:" + i);
    event.setBean(bean);
    10   
    11  List<orderBean> list = new ArrayList<orderBean>();
    12  for (int j = 0; j < 10; j++) {
    13      bean = new orderBean();
    14      bean.setKey("ListKey:" + j);
    15      bean.setValue("ListValue:" + j);
    16      orderItem item = new orderItem();
    17      item.setName("chenx");
    18      item.setSize("100"+j);
    19      bean.setBean(item);
    20      list.add(bean);
    21  }
    22         
    23  orderArray ary = new orderArray();
    24  ary.setOrderBeans(list);           
    25  event.setOrderAry(ary);       
    26  event.setOrderBeans(list);
    27   
    28  String epsql = "select * from orderEvent[orderAry.orderBeans][bean]";
    29  EPStatement epstate = epAdmin.createEPL(epsql);
    30  epstate.addListener(new orderListener());
    31         
    32  epRuntime.sendEvent(event);

    说明:
    1、epl执行语句为 select * from orderEvent[orderAry.orderBeans] 表示查询orderEvent事件中orderAry事件属性字段中的orderBeans 事件,因为orderEvent与orderAry、orderAry与orderBeans都是有一种嵌套关系,就像类中有类一样是具有层次的;
    2、epl执行语句为 select * from orderEvent[orderAry.orderBeans][bean] 表示只查询orderItem事件信息(bean为orderItem类型), 因为orderAry.orderBeans返回的是orderBean类型的数组,而orderItem又是orderBean的属性成员(bean与orderAry.orderBeans不在一个层面上),所以[orderAry.orderBeans][bean]表示的返回orderItem事件;
    3、返回结果的数据格式,由各事件类的toString函数定义;
    4、Contained-Event在join查询中,如果事件来自于named window,那么连接操作就必须加上unidirectional关键字,作用为每次连接操作的结果都独立起来;

    示例:

    String join5 = "select count(*) from " + mediaOrder + "[books.book] as book unidirectional, " + mediaOrder  
              + "[items.item] as item where productId = bookId"; 
    String join4 = "select count(*) from " + mediaOrder + "[books.book] as book, " + mediaOrder  
              + "[items.item] as item where productId = bookId";

    说明:

    Join4中当发送两个同样的mediaOrder对象,聚合函数count是要累加,而join5不会;

  • 相关阅读:
    calc, support, media各自的含义及用法?
    vuex有哪几种属性
    vue-router实现路由懒加载( 动态加载路由 )
    vue生命周期的理解
    vue初始化页面闪动问题
    .params和query的区别
    实现布局数据渲染以列为单位
    一. async函数
    一. includes
    十五. 对象的扩展
  • 原文地址:https://www.cnblogs.com/jianyuan/p/5033212.html
Copyright © 2020-2023  润新知