1
我有UsersCount事件流包含連接的用戶數。 目前有一個查詢觸發時,用戶數由一段時間內,一定的百分比滴下來:Esper:後面跟着聚合標準
expression Disconnected { x => max(x.usersCount) - x.usersCount }
expression DisconnectedPercent { x => Disconnected(x)/max(x.usersCount) * 100 }
select usersCount,
max(usersCount) as maxUsersCount,
DisconnectedPercent(users) as disconnectedPercent,
Disconnected(users) as disconnectedCount
from UsersCount.win:time(2 min) as users
having DisconnectedPercent(users) >= 30
and Disconnected(users) >= 2
output first every 10 minutes
現在我需要提高查詢在幾秒鐘檢查是否用戶重新連接,即DisconnectedPercent擊出了一些負的閾值,例如:
select ...
from pattern [every UsersCount(DisconnectedPercent >= 30) ->
(timer:interval(10 sec) and not UserCount(DisconnectPercent < -10)].win:time(2 min)
現在我實施的解決方案需要兩條語句和一個額外的流。 聲明一個是:
expression Disconnected { x => max(x.usersCount) - x.usersCount }
expression DisconnectedPercent { x => Disconnected(x)/max(x.usersCount) * 100 }
insert into UsersDisconnectTrigger
select usersCount,
max(usersCount) as maxUsersCount,
Disconnected(users) as disconnectedCount,
DisconnectedPercent(users) as disconnectedPercent
from UsersCount.win:time(5 minutes) as users
having DisconnectedPercent(users) >= 30 and Disconnected(users) >= 10
第二條語句註冊一個偵聽到的是:
select a.usersCount as usersCount,
a.maxUsersCount as maxUsersCount,
a.disconnectedCount as disconnectedCount,
a.disconnectedPercent as disconnectedPercent
from pattern [every a=UsersDisconnectTrigger ->
(timer:interval(5 minutes)
and not b=UsersCount((usersCount - a.usersCount)/a.usersCount >= 20/100)))].win:time(5 minutes)
有沒有辦法來編寫單獨的語句來檢測這樣的模式? 是否有可能如上選擇有意義的值?
是的,有兩個額外流的方法是顯而易見的。我正在尋找單一語句的解決方案,這是我們目前擁有的應用程序的限制 – rigal