2017-04-23 36 views
0

我想要在下面兩個上下文中指定的時間之間選擇相同的語句。但是我沒有輸出。當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; 

回答

1

這是因爲嵌套的情況下被OR關係。或者使用一個模式,就像這個例子的結尾。

假設事件類型A啓動,A端,BStart,彎曲和C.

create context CtxSampleNestedContext 
    context SpanA start AStart end AEnd, 
    context SpanB start BStart end BEnd; 

context CtxSampleNestedContext select count(*) from C; 

創建上面的EPL語句後,發動機開始尋找只A啓動事件,還沒有找A端,BStart, BEnd或C事件。

假設一個A啓動事件到達下一個:

  • 發動機停止尋找一個A啓動事件。
  • 引擎開始查找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] 
+0

你能提供一個例子,其中計時器:在使用或操作在上下文中使用? – carva

+0

... pattern [每個計時器:在(0,12,*,*,*)或每個計時器:在(0,18,*,*,*)] ..都可以工作,就像... pattern [每個計時器:在(0,[12,18],*,*,*)] – user650839

+0

結束條件如何? ___開始模式[每個計時器:在(0,12,*,*,*)或每個計時器:在(0,18,*,*,*)] 結束模式[每個計時器:at(0,20,*, *,*)或每個計時器:在(0,23,*,*,*)]; ___ 它是否正確? – carva

相關問題