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
1 | public class MyEvent { |
2 | public static Map<String, Object> getMapEvent(){ |
3 | Map<String, Object> map = new HashMap<String, Object>(); |
4 | map.put("key", "chenx1"); |
5 | map.put("value",1); |
6 | return map; |
7 | } |
8 | |
9 | 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
1 | String epsql = "select * from method:MyEvent.getMapEvent() where value > 0"; |
2 | EPStatement epstate = epAdmin.createEPL(epsql); |
3 | Iterator<EventBean> iter = epstate.iterator(); |
4 | while (iter.hasNext()) { |
5 | EventBean bean = iter.next(); |
6 | System.out.println(bean.getUnderlying()); |
7 | } |
Schema
格式:
1 | create [map | objectarray] schema schema_name [as] |
2 | (property_name property_type [,property_name property_type [,...]) |
3 | [inherits inherited_event_type[, inherited_event_type] [,...]] |
4 | [starttimestamp timestamp_property_name] |
5 | [endtimestamp timestamp_property_name] |
6 | [copyfrom copy_type_name [, copy_type_name] [,...]] |
参数说明:
- map、objectarray分别表示当前定义的schema是map结构还是数组结构。
- schema_name表示schema的名字,全局唯一(as为可选内容)。
- property_name表示schema所包含的属性名称,property_type为属性的类型,多个属性用逗号分隔,所有属性用圆括号括起来可以使用的类型有:int、String等已经内置的Java类型;已经通过Configuration接口注册的事件类型,比如Map,数组,schema等;可以使用POJO类,如果没有import就要写全名,否则写类名即可。
- inherits表示继承别的事件类型,后面跟着的是要继承的事件类型。如果使用了继承,则当前定义的schema包含了继承的事件类型的所有属性。并且可以继承多个,用逗号分隔。
- starttimestamp和endtimestamp是两个特殊的关键字。单独使用starttimestamp时,表示为schema记一个时间戳。后面跟着已经声明的属性并且能够返回一个data-time值。如果联合endtimestamp使用,则表示这个schema只能在某段事件内使用。后面跟着的同样也是已经声明的属性并且能够返回一个data-time值。注意endtimestamp不能单独使用。
- copyfrom表示复制别的事件的所有属性到当前定义的schema中,并且可以copy多个事件,用逗号分隔。
示例:
1 | // 创建schema |
2 | String inepl = "create schema myevent as orderEvent"; |
3 | epAdmin.createEPL(inepl); |
4 | // 查询 |
5 | EPStatement epstate = epAdmin.createEPL("select * from myevent"); |