【发布时间】:2018-06-18 17:34:41
【问题描述】:
假设我有一个事件。该事件有 5 列。类型栏、姓名栏、来电号码、检测时间戳栏和收费栏。 Esper 产生以下 9 个元组:
[Event, CallPOPDWH, 385984MBSNE, time_1, 10]
[Event, CallPOPDWH, 385984MBSNE, time_2, 30]
[Event, CallPOPDWH, 3859157UQHNI,time_3, 40]
[Event, CallPOPDWH, 3859157UQHNI,time_4, 40]
[Event, CallPOPDWH, 385984MBSNE, time_5, 40]
[Event, CallPOPDWH, 3859157UQHNI,time_6, 45]
[Event, CallPOPDWH, 385984MBSNE, time_7, 30]
[Event, CallPOPDWH, 385984MBSNE, time_8, 90]
[Event, CallPOPDWH, 385984MBSNE, time_9, 70]
我想编写一个查询,它将作为结果返回,对于每个呼叫号码,所有检测时间戳,只要费用总和大于 100。只要它找到例如呼叫号码的元组:
385984MBSNE,3859157UQHNI with sum(charge)>100
它会返回:
[385984MBSNE,[time_1, time_2, time_5,time_7],120]
[3859157UQHNI,[time_3, time_4, time_6],125]
[385984MBSNE,[time_8, time_9],160]
重要的是存储每个呼叫号码的时间戳的窗口,当费用总和大于 100 时关闭。然后它将再次打开,直到找到与 sum>100 条件匹配的元组。I尝试过类似的东西:
select calling_number,
window(timestamp).distinctOf(),
sum(charge)
from Event.std:groupwin(calling_number).win:expr_batch(sum(total_call_charge_amount) > 100)
group by calling_number
或
select calling_number,
window(timestamp).distinctOf(),
sum(charge)
from Event.std:groupwin(calling_number).win:time(120 second))
group by calling_number
having sum(e.total_call_charge_amount) > 100
它们似乎都不能正常工作。我观察到时间戳窗口不会删除以前的时间戳。任何帮助都会非常感激。
【问题讨论】:
标签: sql sum aggregation complex-event-processing esper