0

以下の 2 つのコンテキストで指定された時間の間で同じステートメントを選択する必要があります。しかし、出力が得られません。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;
4

1 に答える 1

1

これは、ネストされたコンテキストが 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 イベントの検索を停止します。
  • エンジンは、現在の SpanA ライフサイクルの終了を意味するため、AEnd イベントの検索を開始します。
  • エンジンは、SpanB ライフサイクルの開始を検出するために、BStart イベントの検索を開始します。

このシナリオでは、BStart イベントが到着したとします。論理的には、これが SpanB ライフサイクルの始まりです。

  • エンジンは、BStart イベントの検索を停止します。
  • エンジンは、現在の SpanB ライフサイクルの終了を意味するため、BEnd イベントの検索を開始します。
  • エンジンは、現在の SpanA ライフサイクルの終了を意味するため、AEnd イベントを探し続けます。
  • エンジンは C イベントの検索を開始し、到着する各 C のカウントを開始します。

このシナリオでは、BEnd イベントが到着したとします。これは、論理的には、SpanB ライフサイクルの終わりです。

  • エンジンは BEnd イベントの検索を停止します。
  • エンジンは C イベントの検索を停止し、それぞれのカウントを停止します。
  • エンジンは、別の SpanB ライフサイクルの開始を意味するため、BStart イベントの検索を開始します。

このシナリオでは、AEnd イベントが到着したとします。これは、論理的には、SpanA ライフサイクルの終わりです。

  • エンジンは AEnd イベントの検索を停止します。
  • エンジンは BStart イベントの検索を停止します。
  • エンジンは、別の SpanA ライフサイクルの開始を意味するため、AStart イベントの検索を開始します。

上記のシナリオでは、AEnd が到着した後、エンジンはステートメントが最初に作成された後のエンジンと同じ状態に戻ります。

たとえば、ユースケースで論理 OR 関係が必要な場合 (上記とは異なります):

create context CtxSampleNestedContext 
  start pattern[every a=AStart or every a=BStart] as mypattern 
  end pattern[every AEnd or every BEnd]
于 2017-04-23T14:53:04.537 に答える