Как я могу выбрать значение из последовательного значения события с помощью сиддхи

например, это данные:

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, второй столбец - временная метка, третий столбец - значение, интервал между метками времени составляет 1 секунду.

Я хочу отслеживать значение события, если я обнаружил значение> = 85 (например, id = 4), я начну подсчет, если следующие два последовательных значения> = 85 (например, id = 5 / id = 6), тогда я поместит третье значение события в OutputStream. (например, id = 6, value = 88, timestamp = 1470732425000)

в то же время я очищаю счет и ожидаю значение ниже 85 (например, id = 7, value = 84), тогда я снова буду контролировать, когда я обнаружу значение> = 85 (например, id = 11, value = 89) i начнется подсчет, если следующие два последовательных значения> = 85 (например, id = 12 / id = 13), тогда я помещу третье значение события в OutputStream. (например, id = 13, value = 87, timestamp = 1470732432000) ...

все, что я хочу сделать, прежде чем я отправлю этот вопрос, у меня есть ответ в этот пост, я пробовал этот код:

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.


person willxiang    schedule 18.08.2016    source источник
comment
Вы хотите отслеживать 3 последовательных события каждый раз или это будет варьироваться?   -  person Charini Nanayakkara    schedule 22.08.2016
comment
Запрос зависит от того, какой результат вы хотите получить. Не могли бы вы указать ответы, которые хотите получить для данного примера? Хотите ли вы получить идентификаторы 6, 13 и 26 в качестве вывода (из-за вашей спецификации промежуточного события со значением ‹85) или что-то еще.   -  person Charini Nanayakkara    schedule 22.08.2016


Ответы (1)


Хотя DAS (Siddhi) поддерживает обработку последовательностей / шаблонов, для ваших требований вам может потребоваться написать собственное расширение. Я написал образец расширения оконного процессора для удовлетворения ваших требований (исходный код). Загрузите и разместите siddhi-extension-condition-window-1.0.jar в <das_home>/repository/components/lib/ каталоге и перезапустите сервер. См. test case, чтобы получить представление об использовании расширения.

person Grainier    schedule 23.08.2016