为什么这个上下文不起作用?
Why wont this context work?
我希望在以下两个上下文中指定的时间之间对 select 执行相同的语句。但是我没有输出。如何在单个语句中使用嵌套上下文在 B 处于活动状态且 C 处于活动状态时获得输出?
create context A
context B start (0, 12, *, *, *) end (0, 18, *, *, *),
context C start (0, 20, *, *, *) end (0, 23, *, *, *);
声明:
context A select * from MyEvent;
这是因为嵌套上下文不是 OR 关系。对于 OR,请使用此示例末尾的模式。
假设事件类型为 AStart、AEnd、BStart、BEnd 和 C。
create context CtxSampleNestedContext
context SpanA start AStart end AEnd,
context SpanB start BStart end BEnd;
context CtxSampleNestedContext select count(*) from C;
创建上述 EPL 语句后,引擎开始仅查找 AStart 事件,尚未查找 AEnd、BStart、BEnd 或 C 事件。
假设下一个 AStart 事件到达:
- 引擎停止寻找 AStart 事件。
- 引擎开始寻找 AEnd 事件,因为那意味着
当前 SpanA 生命周期结束。
- 引擎开始寻找 BStart 事件,以检测
SpanB 生命周期的开始。
在该场景中,假设BStart 事件到达。从逻辑上讲,这是 SpanB 生命周期的开始:
- 引擎停止寻找更多的 BStart 事件。
- 引擎开始寻找 BEnd 事件,因为这意味着
当前 SpanB 生命周期结束。
- 引擎一直在寻找 AEnd 事件,因为这意味着
当前 SpanA 生命周期结束。
- 引擎开始寻找 C 事件,现在开始计算每个 C
到了。
在该场景中,假设 BEnd 事件到达。从逻辑上讲,这是 SpanB 生命周期的结束:
- 引擎停止寻找 BEnd 事件。
- 引擎停止寻找 C 事件并停止对每个事件进行计数。
- 引擎开始寻找 BStart 事件,因为那意味着
另一个 SpanB 生命周期的开始。
在该场景中,假设AEnd 事件到达。从逻辑上讲,这是 SpanA 生命周期的结束:
- 引擎停止寻找 AEnd 事件。
- 引擎停止寻找 BStart 事件。
- 引擎开始寻找 AStart 事件,因为那意味着
另一个 SpanA 生命周期的开始。
在上述场景中,在 AEnd 到达后,引擎恢复到与最初创建语句后引擎相同的状态。
如果您的用例需要像这样的逻辑或关系(不等同于上述):
create context CtxSampleNestedContext
start pattern[every a=AStart or every a=BStart] as mypattern
end pattern[every AEnd or every BEnd]
我希望在以下两个上下文中指定的时间之间对 select 执行相同的语句。但是我没有输出。如何在单个语句中使用嵌套上下文在 B 处于活动状态且 C 处于活动状态时获得输出?
create context A
context B start (0, 12, *, *, *) end (0, 18, *, *, *),
context C start (0, 20, *, *, *) end (0, 23, *, *, *);
声明:
context A select * from MyEvent;
这是因为嵌套上下文不是 OR 关系。对于 OR,请使用此示例末尾的模式。
假设事件类型为 AStart、AEnd、BStart、BEnd 和 C。
create context CtxSampleNestedContext
context SpanA start AStart end AEnd,
context SpanB start BStart end BEnd;
context CtxSampleNestedContext select count(*) from C;
创建上述 EPL 语句后,引擎开始仅查找 AStart 事件,尚未查找 AEnd、BStart、BEnd 或 C 事件。
假设下一个 AStart 事件到达:
- 引擎停止寻找 AStart 事件。
- 引擎开始寻找 AEnd 事件,因为那意味着 当前 SpanA 生命周期结束。
- 引擎开始寻找 BStart 事件,以检测 SpanB 生命周期的开始。
在该场景中,假设BStart 事件到达。从逻辑上讲,这是 SpanB 生命周期的开始:
- 引擎停止寻找更多的 BStart 事件。
- 引擎开始寻找 BEnd 事件,因为这意味着 当前 SpanB 生命周期结束。
- 引擎一直在寻找 AEnd 事件,因为这意味着 当前 SpanA 生命周期结束。
- 引擎开始寻找 C 事件,现在开始计算每个 C 到了。
在该场景中,假设 BEnd 事件到达。从逻辑上讲,这是 SpanB 生命周期的结束:
- 引擎停止寻找 BEnd 事件。
- 引擎停止寻找 C 事件并停止对每个事件进行计数。
- 引擎开始寻找 BStart 事件,因为那意味着 另一个 SpanB 生命周期的开始。
在该场景中,假设AEnd 事件到达。从逻辑上讲,这是 SpanA 生命周期的结束:
- 引擎停止寻找 AEnd 事件。
- 引擎停止寻找 BStart 事件。
- 引擎开始寻找 AStart 事件,因为那意味着 另一个 SpanA 生命周期的开始。
在上述场景中,在 AEnd 到达后,引擎恢复到与最初创建语句后引擎相同的状态。
如果您的用例需要像这样的逻辑或关系(不等同于上述):
create context CtxSampleNestedContext
start pattern[every a=AStart or every a=BStart] as mypattern
end pattern[every AEnd or every BEnd]