计算 Esper 中所有事件的自定义函数 window
Custom function to calculate on all events in an Esper window
我想知道将 window 中的所有事件公开给自定义函数的最佳或最惯用的方法是什么。以下示例是根据 Esper 在线文档中使用的股票价格样式示例构建的。
假设我们有以下 Esper 查询:
select avg(price), custom_function(price) from OrderEvent#unique(symbol)
avg(price)
部分 returns 每个交易品种的最近价格的平均值。假设我们希望 custom_function
以类似的方式工作,但它需要复杂的逻辑——每次需要结果时它都希望遍历 window 中的每个值(例如异常值检测方法可能需要这样的一种算法)。
明确地说,我要求算法类似于:
custom_function(window):
for each event in window:
update calculation
并且没有聪明的方法来更新计算作为事件进入或离开 window。
自定义聚合可以通过将事件推送和弹出到集合来实现此目的,但是当使用原始类型时,这会出现问题。这也感觉很浪费,因为大概 esper 已经在 window 中收集了事件,所以我们不想复制它。
Esper 文档提到了许多自定义内容的方法,例如,请参阅 this Solution Pattern。还提到的是 'pull API' 可以迭代 window 中的所有事件。
什么方法被认为是解决此类问题的最佳方法?
要同时访问所有事件,请使用 window(*)
或 prevwindow(*)
。
select MyLibrary.computeSomething(window(*)) from ...
computeSomething
是classMyLibrary
的public静态方法(或定义一个UDF)。
要一次访问单个事件,您可以使用枚举方法。聚合方法有一个初始值和累加器 lambda。有一个扩展 API 可以扩展您也可以使用的现有枚举方法。
select window(*).aggregate(..., (value, eventitem) => ...) from ...
link to window(*) doc 和
link to enum method aggregate doc 和
link to enum method extension api doc
我想知道将 window 中的所有事件公开给自定义函数的最佳或最惯用的方法是什么。以下示例是根据 Esper 在线文档中使用的股票价格样式示例构建的。
假设我们有以下 Esper 查询:
select avg(price), custom_function(price) from OrderEvent#unique(symbol)
avg(price)
部分 returns 每个交易品种的最近价格的平均值。假设我们希望 custom_function
以类似的方式工作,但它需要复杂的逻辑——每次需要结果时它都希望遍历 window 中的每个值(例如异常值检测方法可能需要这样的一种算法)。
明确地说,我要求算法类似于:
custom_function(window):
for each event in window:
update calculation
并且没有聪明的方法来更新计算作为事件进入或离开 window。
自定义聚合可以通过将事件推送和弹出到集合来实现此目的,但是当使用原始类型时,这会出现问题。这也感觉很浪费,因为大概 esper 已经在 window 中收集了事件,所以我们不想复制它。
Esper 文档提到了许多自定义内容的方法,例如,请参阅 this Solution Pattern。还提到的是 'pull API' 可以迭代 window 中的所有事件。
什么方法被认为是解决此类问题的最佳方法?
要同时访问所有事件,请使用 window(*)
或 prevwindow(*)
。
select MyLibrary.computeSomething(window(*)) from ...
computeSomething
是classMyLibrary
的public静态方法(或定义一个UDF)。
要一次访问单个事件,您可以使用枚举方法。聚合方法有一个初始值和累加器 lambda。有一个扩展 API 可以扩展您也可以使用的现有枚举方法。
select window(*).aggregate(..., (value, eventitem) => ...) from ...
link to window(*) doc 和 link to enum method aggregate doc 和 link to enum method extension api doc