2016-08-18 142 views
0

例如挑選出從事件的連續的值的值,即數據:我怎樣才能使用神功

1,1470732420000,0 
2,1470732421000,0 
3,1470732422000,0 
4,1470732423000,86 
5,1470732424000,87 
6,1470732425000,88 
7,1470732426000,84 
8,1470732427000,0 
9,1470732428000,0 
10,1470732429000,0 
11,1470732430000,89 
12,1470732431000,89 
13,1470732432000,87 
14,1470732433000,89 
15,1470732434000,85 
16,1470732435000,89 
17,1470732436000,89 
18,1470732437000,87 
19,1470732438000,86 
20,1470732439000,88 
21,1470732440000,0 
22,1470732441000,0 
23,1470732442000,0 
24,1470732443000,87 
25,1470732444000,85 
26,1470732445000,86 
27,1470732446000,0 
28,1470732447000,0 
29,1470732448000,0 
30,1470732449000,0 

列中的一個是ID,柱2是時間戳,列三是,時間戳之間的間隔爲1秒。我想要監視事件的值,如果我發現值> = 85(例如id = 4),我將開始計數,如果下兩個連續值> = 85(例如id = 5/id = 6) ),然後我將第三個值的事件OutputStream。(例如id = 6,值= 88,時間戳= 1470732425000)

在同一時間我清除計數和等待值低於85(例如ID = 7,value = 84),然後我會再次監測,當我發現值大於等於85(例如id = 11,值= 89)時,我將開始計數,如果接下來的兩個連續值> = 85(例如id = 12 (id = 13,value = 87,timestamp = 1470732432000)...

這一切都是我想要做的,befo我重新張貼此問,我有在this post一個答案,我試過這段代碼:

from every a1=InputStream[value>=85], a2=InputStream[value>=85]+, a3=InputStream[value<85] 
select a2[1].id, a2[1].value 
having (not (a2[1] is null)) 
insert into OutPutStream; 

和它的作品,但我發現它的價值後該值插入的OutputStream < = 85 ,我想要的是如果我有三個連續值> = 85然後我插入到值立即(我不想等待,如果下一個值> = 85所有時間) 其實,我只是想錄制三秒鐘內連續三秒鐘的值(> = 85)。 我正在使用wso2das-3.1.0-SNAPSHOT。

+0

你想每次監測3個連續的事件嗎?或者這會有所不同嗎? –

+0

查詢取決於你想從中得到什麼樣的輸出。你能否指定你想要得到的答案?無論您是想要將ID 6,13和26作爲輸出(由於您指定的值爲<85的中間事件)或其他內容。 –

回答

3

儘管DAS(Siddhi)支持序列/模式處理,但對於您的需求,您可能需要編寫自定義擴展。我已經編寫了一個樣例窗口處理器擴展來滿足您的需求(source code)。下載並在<das_home>/repository/components/lib/目錄中放置siddhi-extension-condition-window-1.0.jar並重新啓動服務器。請參閱test case以瞭解擴展的用法。