如何对 2 windows 进行计算/比较?
How to do calculations/ comparisons on 2 windows?
我正在收集具有不同 ID 的事件,传入事件中有 n 种固定 ID。我想根据时间范围收集过去事件的平均值。不同类型 ID 之间的事件。
比方说,有 2 个设备发送 id 为 'a' 和 'b' 的数据/事件。我想获取两个设备过去 5 分钟数据的平均值,然后比较两个平均值以做出一些决定。
通过这段代码,我正在收集过去 n 分钟的数据并存储在 2 windows 中。
`
@source(type='http', receiver.url='http://localhost:5007/SweetProductionEP', @map(type = 'json'))
define stream InProduction(name string, amount int);
define window hold_a(avg_amount double) length(1);
define window hold_b(avg_amount double) length(1);
from InProduction[name=='a']#window.timeBatch(5 min)
select avg(amount) as avg_amount
group by name
insert into hold_a;
from InProduction[name=='b']#window.timeBatch(5 min)
select avg(amount) as avg_amount
group by name
insert into hold_b;`
window hold_a 和 hold_b 将获取过去 5 分钟的平均数据。现在我想比较来自 windows 的数据并做出决定。
我已经尝试在两者上加入 windows 但没有执行加入查询。
你必须使用一种模式来实现这一点。下面查询输出具有最高平均值的名称到 highestAvgStream。
@source(type='http', receiver.url='http://localhost:5007/SweetProductionEP', @map(type = 'json'))
define stream InProduction(name string, amount int);
from InProduction[name=='a']#window.timeBatch(5 min)
select avg(amount) as avg_amount, name
insert into avgStream;
from InProduction[name=='b']#window.timeBatch(5 min)
select avg(amount) as avg_amount, name
insert into avgStream;`
from every(e1=avgStream -> e2=avgStream)
select ifthenelse(e1.avg_amount>e2.avg_amount,e1.name,e2.name) as highestAvgName
insert into HighestAvgStream;
我正在收集具有不同 ID 的事件,传入事件中有 n 种固定 ID。我想根据时间范围收集过去事件的平均值。不同类型 ID 之间的事件。 比方说,有 2 个设备发送 id 为 'a' 和 'b' 的数据/事件。我想获取两个设备过去 5 分钟数据的平均值,然后比较两个平均值以做出一些决定。
通过这段代码,我正在收集过去 n 分钟的数据并存储在 2 windows 中。 `
@source(type='http', receiver.url='http://localhost:5007/SweetProductionEP', @map(type = 'json'))
define stream InProduction(name string, amount int);
define window hold_a(avg_amount double) length(1);
define window hold_b(avg_amount double) length(1);
from InProduction[name=='a']#window.timeBatch(5 min)
select avg(amount) as avg_amount
group by name
insert into hold_a;
from InProduction[name=='b']#window.timeBatch(5 min)
select avg(amount) as avg_amount
group by name
insert into hold_b;`
window hold_a 和 hold_b 将获取过去 5 分钟的平均数据。现在我想比较来自 windows 的数据并做出决定。
我已经尝试在两者上加入 windows 但没有执行加入查询。
你必须使用一种模式来实现这一点。下面查询输出具有最高平均值的名称到 highestAvgStream。
@source(type='http', receiver.url='http://localhost:5007/SweetProductionEP', @map(type = 'json'))
define stream InProduction(name string, amount int);
from InProduction[name=='a']#window.timeBatch(5 min)
select avg(amount) as avg_amount, name
insert into avgStream;
from InProduction[name=='b']#window.timeBatch(5 min)
select avg(amount) as avg_amount, name
insert into avgStream;`
from every(e1=avgStream -> e2=avgStream)
select ifthenelse(e1.avg_amount>e2.avg_amount,e1.name,e2.name) as highestAvgName
insert into HighestAvgStream;