82.9. 划分时间或长度窗口
在流模式中,决策引擎可以从指定时间或长度窗口中处理事件。分片时间窗是可以处理事件的指定时间段。分片长度窗口是可以处理的事件数量。当您在 DRL 规则或 Java 应用程序中声明分片窗口时,决策引擎会在编译时标识并创建正确的内部结构,以仅使用该分片窗口中的数据来评估该规则。
例如,以下 DRL 规则片断指示决策引擎仅处理来自最后 2 分钟(由时间窗口)的库存点,或者只处理最后 10 个库存点(由长度窗口):
从最后 2 分钟开始的进程库存点(指定时间窗)
StockPoint() over window:time(2m)
处理最后 10 个库存点(过期长度窗口)
StockPoint() over window:length(10)
82.9.1. 为规则数据声明分片窗口 复制链接链接已复制到粘贴板!
您可以为事件声明时间的分片窗口(时间流)或长度(发生时间数),以便决策引擎仅使用该窗口中的数据来评估规则。
�程
在 DRL 规则文件中,为插入事实指定 window:<time_or_length> (<value>)。
例如,以下两个 DRL 规则根据平均温度激活触发警告。但是,第一个规则使用分片时间窗计算最后 10 分钟的平均时间窗,第二个规则使用分片长度窗口来计算上一个温度读取的平均窗口。
分片时间窗的平均温度
rule "Sound the alarm if temperature rises above threshold"
when
TemperatureThreshold($max : max)
Number(doubleValue > $max) from accumulate(
SensorReading($temp : temperature) over window:time(10m),
average($temp))
then
// Sound the alarm.
end
分片长度窗口的平均温度
rule "Sound the alarm if temperature rises above threshold"
when
TemperatureThreshold($max : max)
Number(doubleValue > $max) from accumulate(
SensorReading($temp : temperature) over window:length(100),
average($temp))
then
// Sound the alarm.
end
决策引擎丢弃任何超过 10 分钟或不是上一次读取的一部分的任何 SensorReading 事件,并继续实时重新计算平均或读取"slide"。
决策引擎不会自动从 KIE 会话中删除过时的事件,因为其他没有分片窗口声明的规则可能依赖于这些事件。决策引擎将事件存储在 KIE 会话中,直到事件由显式规则声明过期,或根据 KIE 基础中推断的数据在决策引擎中隐式原因。