在几个查询中重用esper中的流

时间:2017-03-14 01:41:31

标签: java esper

我正在尝试使用EsperIO从数据库加载一些信息,并在具有不同条件的其他查询中使用它。要做到这一点,我使用以下代码:

    ConfigurationDBRef dbConfig = new ConfigurationDBRef();
    dbConfig.setDriverManagerConnection("org.postgresql.Driver",
                     "jdbc:postgresql://localhost:5432/myDatabase",
                     "myUser", "myPassword");

    Configuration engineConfig = new Configuration();
    engineConfig.addDatabaseReference("myDatabase", dbConfig);

    // Custom class
    engineConfig.addEventType("UserFromDB", UserDB.class);

    EPServiceProvider esperEngine = EPServiceProviderManager.getDefaultProvider(engineConfig);

    String statement =  "insert into UserFromDB "
                      + "   select * from sql:myDatabase ['SELECT * from data.user']";

    //Install this query in the engine
    EPStatement queryEngineObject = esperEngine.getEPAdministrator().createEPL(statement);

    // 1. At this point I can iterate over queryEngineObject without problems getting the information sent by database

    // This query is only a 'dummy example', the 'final queries' are more complex
    statement = "select * from UserFromDB";
    EPStatement queryEngineObject2 = esperEngine.getEPAdministrator().createEPL(statement);

    // 2. If I try to iterate over queryEngineObject2 I receive no data

如何在其他查询中重复使用 UserFromDB 存储的信息? (在上面的示例中,在 queryEngineObject2 中)

1 个答案:

答案 0 :(得分:1)

由于数据库不提供流,因此您没有流。数据库查询仅在迭代/拉取行时才提供行。 一种选择是循环每一行并使用“sendEvent”将其发送到引擎:

// create other EPL statements before iterating
Iterator<EventBean> it = statement.iterator();
while(it.hasNext()) {
  epService.getEPRuntime().sendEvent(event);
}