我有一个文本文件,其中包含以下格式的行:
XYZ 120
ABC 200
...
本质上,一个 3 字符串和一个整数值。它们的格式不会改变,但整数的值可能取决于事件。
我想将此文件中的信息存储到引擎中,以便我可以在 EPL 语句中使用它。我希望能够将传入事件与我的列表进行比较,并在某些情况发生时采取行动。
也就是说,每次发生事件时,我都会检查我的数据以查看它是否在我的列表中。假设一个事件有代码 XYZ,我检查并看到我有它,我执行操作然后更改 XYZ 整数的值。不需要更新文件,它只是将数据输入引擎的一种手段。
我相信有几种可能的方法可以解决这个问题,但我不确定如何完成它们的实施以及最佳实践。
选项 1:使用方法调用,如中所述
5.14. Accessing Non-Relational Data via Method, Script or UDF Invocation
我按照有关提供方法和元数据的说明进行操作,但我很困惑如何在 EPL 语句中迭代返回的数据?我的方法的返回是:
Collection<MyStock> stocks
其中 MyStock 是 [String, Integer] 对。
where event.code = stocks.code
显然不起作用,因为股票是一个集合
那么如何遍历 EPL 中的集合呢?
选项 2:或者,我可以将文件输入 Map,然后将 Map 作为变量保存到引擎中?
我也被这里的迭代困住了。我相信我可能错过了这些概念中的关键部分,我想指出正确的方向。更好的是,类似的东西的工作示例会很好。
可能的解决方案:
@Name('createTable')
create table HolderTable(code string primary key, amount int);
@Name('insertTable')
insert into HolderTable select code, amount from MyStock;
@Name('compareEventsWithTable')
@Subscriber(className='subscribers.MySubscriber')
on TickEvent as tick
select code, amount from HolderTable
where tick.stockCode = code;