wso2 - ¿Cómo usar window.frequent?
wso2cep siddhi (2)
En esta consulta particular, '' window.frequent(3, symbol)
'' hará que la consulta encuentre los 3 símbolos más frecuentes (o 3 símbolos que tengan el mayor número de ocurrencias). Pero, cuando insertas eventos en outputStream
, has insertado solo eventos expired
. De modo que, como resultado final, esta consulta dará como resultado los eventos caducados de la ventana frecuente .
En una ventana frecuente, los eventos vencidos son eventos que ya no pertenecen a un grupo frecuente. En este caso, los eventos que son el símbolo no se encuentran entre los 3 símbolos que tienen el mayor número de ocurrencias.
para un ejemplo si envía la siguiente secuencia de eventos,
{"symbolA", 71.36f, 100}
{"symbolB", 72.36f, 100}
{"symbolB", 74.36f, 100}
{"symbolC", 73.36f, 100}
{"symbolC", 76.36f, 100}
{"symbolD", 76.36f, 100}
{"symbolD", 76.36f, 100}
La consulta arrojará {"symbolA", 71.36f, 100}
.
Cuando envía los eventos con ''symbolD''. SymbolA ya no estará entre los símbolos top3 con el mayor número de ocurrencias para que el evento con el símbolo A expire y se emita {"symbolA", 71.36f, 100}.
¿Alguien puede darme un ejemplo sobre cómo usar window.frequent? Por ejemplo, escribo una prueba,
"define stream cseEventStream (symbol string, price float, time long);" +
"" +
"@info(name = ''query1'') " +
"from cseEventStream[700 > price]#window.frequent(3, symbol) " +
"select symbol, price, time " +
"insert expired events into outputStream;";
Pero desde el outputStream, no puedo averiguar la regla.
Gracias.
Para cada evento que tenga un precio> 700, esta ventana retendrá los 3 elementos más frecuentes en función del símbolo y, dado que el tipo de salida es "eventos caducados", solo recibirá el resultado una vez que un evento pierda su posición como evento frecuente.
Ejemplo: ventana frecuente de tamaño 2
Entrada
WSO2 1000 1
WSO2 1000 2
ABC 700 3
XYZ 800 4
Salida
ABC 700 3
El evento ABC estaba en la ventana frecuente y expiró al recibir el evento XYZ. Si utiliza la salida predeterminada que es ''eventos actuales'', emitirá todos los eventos entrantes que se seleccionan como eventos frecuentes y se colocan en la ventana.
La implementación se basa en el algoritmo de conteo de Misra-Gries .
Documentación: https://docs.wso2.com/display/CEP400/Inbuilt+Windows#InbuiltWindows-frequent
Casos de prueba: https://github.com/wso2/siddhi/blob/master/modules/siddhi-core/src/test/java/org/wso2/siddhi/core/query/window/FrequentWindowTestCase.java