Esper系列(八)Method Definition、Schema

来源:互联网 发布:spss信度分析 输入数据 编辑:程序博客网 时间:2024/06/03 16:38
Method Definition

作用:以公共静态方法的方式去访问外部数据。

 

应用说明:

1、返回数据的方法必须是公共静态方法(方法参数可以有多个也可以没有);
2、如果返回一条数据或无返回数据,则方法的返回类型可以是Java类或者Map类型数据。如果返回多条数据(包括一条),则方法返回类型必须是Java类的数组或者Map数组;
3、如果方法的返回类型是Java类或者Java类数组,则Java的类定义必须包含针对属性的get方法。
4、如果方法的返回类型是Map或者Map数组,则Map的key-value定义固定为<String, Object>;
5、如果返回的数据是Map或者Map数组,除了定义返回数据的方法外,还要定义返回元数据的方法(这个元数据针对返回的数据)。方法是公共静态方法,且必须是无参数方法。方法返回类型为Map<String, Class>,String表示返回的数据的名称,Class表示返回的数据的类型。返回元数据的方法名称=返回数据的方法名称+Metadata。

 

例子:

文件名:MyEvent.java

public class MyEvent {    public static Map<String, Object> getMapEvent(){        Map<String, Object> map = new HashMap<String, Object>();        map.put("key", "chenx1");        map.put("value",1);        return map;    }        public static Map<String, Class> getMapEventMetadata(){ 10          Map<String, Class> map = new HashMap<String, Class>();  11          map.put("key", String.class); 12          map.put("value", int.class); 13          return map; 14      } 15  }

文件名:orderMainTest.java

String epsql = "select * from method:MyEvent.getMapEvent() where value > 0";EPStatement epstate = epAdmin.createEPL(epsql);Iterator<EventBean> iter = epstate.iterator();while (iter.hasNext()) {EventBean bean = iter.next();    System.out.println(bean.getUnderlying());}

 

Schema

格式:

create [map | objectarray] schema schema_name [as]     (property_name property_type [,property_name property_type [,...])  [inherits inherited_event_type[, inherited_event_type] [,...]]  [starttimestamp timestamp_property_name]  [endtimestamp timestamp_property_name]  [copyfrom copy_type_name [, copy_type_name] [,...]]

参数说明:

  1. map、objectarray分别表示当前定义的schema是map结构还是数组结构。
  2. schema_name表示schema的名字,全局唯一(as为可选内容)。
  3. property_name表示schema所包含的属性名称,property_type为属性的类型,多个属性用逗号分隔,所有属性用圆括号括起来可以使用的类型有:int、String等已经内置的Java类型;已经通过Configuration接口注册的事件类型,比如Map,数组,schema等;可以使用POJO类,如果没有import就要写全名,否则写类名即可。
  4. inherits表示继承别的事件类型,后面跟着的是要继承的事件类型。如果使用了继承,则当前定义的schema包含了继承的事件类型的所有属性。并且可以继承多个,用逗号分隔。
  5. starttimestamp和endtimestamp是两个特殊的关键字。单独使用starttimestamp时,表示为schema记一个时间戳。后面跟着已经声明的属性并且能够返回一个data-time值。如果联合endtimestamp使用,则表示这个schema只能在某段事件内使用。后面跟着的同样也是已经声明的属性并且能够返回一个data-time值。注意endtimestamp不能单独使用。
  6. copyfrom表示复制别的事件的所有属性到当前定义的schema中,并且可以copy多个事件,用逗号分隔。

示例:

// 创建schemaString inepl = "create schema myevent as orderEvent";epAdmin.createEPL(inepl);// 查询EPStatement epstate = epAdmin.createEPL("select * from myevent");
0 0
原创粉丝点击