我是esper的新手,我正在尝试从具有多个高速事件的事件流中过滤事件属性。
我正在使用kafka将csv逐行从生产者发送到消费者,在消费者处,我将这些行转换为hashmap,并在esper的运行时创建事件。
例如,下面列出了每1秒发生一次的事件
天气事件流:
e1={hum=51.0,precipi=1,precipm=1,tempi=57.9,icon=clear,picku\u datetime=2016-09-26 02:51:00,tempm=14.4,thunder=0,windchilli=,wgusti=,pressurei=30.18,windchillim=}
e2={hum=51.5,precipi=1,precipm=1,tempi=58.9,icon=clear,picku\u datetime=2016-09-26 02:55:00,tempm=14.5,thunder=0,windchilli=,wgusti=,pressurei=31.18,windchillim=}
e3={hum=52,precipi=1,precipm=1,tempi=59.9,icon=clear,picku\u datetime=2016-09-26 02:59:00,tempm=14.6,thunder=0,windchilli=,wgusti=,pressurei=32.18,windchillim=}#
其中e1、e2…en是weatherevent中的多个事件
在上面的事件中,我只想过滤掉hum、tempi、tempm和presssurei等属性,因为它们会随着时间的推移而变化(在4秒内),不想关心那些根本没有变化或变化非常缓慢的属性。
使用下面的epl查询,我可以过滤掉像temp,hum等属性
@name('out')从weatherevent中选择*。win:time(10秒)匹配识别(按取货日期时间划分)?测量a.tempm?作为临时工,临时工?作为b\u temp模式(ab),将b定义为math.abs(b.tempm?-a、 温度?>0)
问题是,我只能在模式匹配的查询中指定tempm或hum。
但是由于数据来自csv,并且它具有高维或高特性,所以我不知道之前事件的属性是什么。
我希望esper能够自动检测正在更改的特性/属性(在运行时),并将其过滤掉,而无需我指定事件的属性。
你知道怎么做吗?这对埃斯珀来说是可能的吗?如果没有,我可以用其他的cep引擎,比如siddhi,oraclecep吗?
1条答案
按热度按时间a7qyws3x1#
您可以在事件属性名称中添加“?”,以获取在定义事件类型时未知的那些属性的值。这被称为动态属性,请参阅文档。返回的类型是object,因此需要向下转换。