WSO2:更新 Siddhi 查询中的输出流
WSO2 : Updating an output stream in Siddhi Query
我有一个 siddhi 查询,通过使用时间批 window 来获取一分钟内的总事件数。使用输出流,我正在更新一个条形图,其中 x 轴上的时间戳(日期和时间,直到分钟)和 y 轴上的事件计数。
但有时一分钟内的事件数量太长而无法传输,因此查询无法给出正确的结果。
例如,如果我得到总共 60 个事件,并且此查询首先给我显示在条形图中的 40 个计数,但一分钟后它会将其值更改为 20,这根据逻辑是正确的,但我很担心如果有办法我可以更新任何以前的时间戳(在这种情况下为 40+20)的流和条形图,并为下一个即将到来的时间戳插入新值。
我看到update函数是用tables而不是stream的,是这样吗?
而且我还想要 2 个 outputStreams 从同一输入流填充两个不同的条形图。那么下面的查询是否正确?
查询是:
/* Enter a unique ExecutionPlan */
@Plan:name('FTPExecutionPlan')
/* Enter a unique description for ExecutionPlan */
-- @Plan:description('ExecutionPlan')
/* define streams/tables and write queries here ... */
@Import('FTPInStream:1.0.0')
define stream FTPInStream (ts string, uid string, id_orig_h string, id_orig_p int, id_resp_h string, id_resp_p int, user string, password string,command string, arg string, mime_type string, file_size string, reply_code int, reply_msg string);
@Export('FTPIPOutStream:1.0.0')
define stream FTPIPOutStream (ip_address string, ftp_requests int);
@Export('FTPOutStream:1.0.0')
define stream FTPOutStream (ts string, ftp_requests int);
from FTPInStream
select time:dateFormat(str:replaceAll(ts,'T',' '),'yyyy-MM-dd HH:mm', 'yyyy-MM-dd HH:mm:ss') as ts, uid, id_orig_h, id_orig_p, id_resp_h, id_resp_p
insert into intermediateStream;
from intermediateStream#window.timeBatch(1 min)
select ts, cast(count(ts), 'int') as ftp_requests
group by ts
insert into FTPOutStream;
from intermediateStream#window.timeBatch(1 min)
select id_orig_h as ip_address, cast(count(id_orig_h), 'int') as ftp_requests
group by id_orig_h
insert into FTPIPOutStream;
But there are sometimes when either the number of events in one minute take too long to be transmitted and hence query does not give correct results.
在上述情况下,您可能应该使用 externalTimeBatch window,而不是 timeBatch window。然后它会根据事件的时间戳而不是实际时间来处理事件批次。
I have seen update function is used with tables not stream, is it so?
是的。只有事件表具有 delete/update 功能。事件流没有那个功能。
And also I want 2 outputStreams populating two different bar charts from the same input stream. So is below query correct for that purpose?
是的。由于您同时导出 FTPOutStream 和 FTPIPOutStream,因此您可以使用它们来填充两个不同的条形图。
我有一个 siddhi 查询,通过使用时间批 window 来获取一分钟内的总事件数。使用输出流,我正在更新一个条形图,其中 x 轴上的时间戳(日期和时间,直到分钟)和 y 轴上的事件计数。
但有时一分钟内的事件数量太长而无法传输,因此查询无法给出正确的结果。
例如,如果我得到总共 60 个事件,并且此查询首先给我显示在条形图中的 40 个计数,但一分钟后它会将其值更改为 20,这根据逻辑是正确的,但我很担心如果有办法我可以更新任何以前的时间戳(在这种情况下为 40+20)的流和条形图,并为下一个即将到来的时间戳插入新值。
我看到update函数是用tables而不是stream的,是这样吗? 而且我还想要 2 个 outputStreams 从同一输入流填充两个不同的条形图。那么下面的查询是否正确?
查询是:
/* Enter a unique ExecutionPlan */
@Plan:name('FTPExecutionPlan')
/* Enter a unique description for ExecutionPlan */
-- @Plan:description('ExecutionPlan')
/* define streams/tables and write queries here ... */
@Import('FTPInStream:1.0.0')
define stream FTPInStream (ts string, uid string, id_orig_h string, id_orig_p int, id_resp_h string, id_resp_p int, user string, password string,command string, arg string, mime_type string, file_size string, reply_code int, reply_msg string);
@Export('FTPIPOutStream:1.0.0')
define stream FTPIPOutStream (ip_address string, ftp_requests int);
@Export('FTPOutStream:1.0.0')
define stream FTPOutStream (ts string, ftp_requests int);
from FTPInStream
select time:dateFormat(str:replaceAll(ts,'T',' '),'yyyy-MM-dd HH:mm', 'yyyy-MM-dd HH:mm:ss') as ts, uid, id_orig_h, id_orig_p, id_resp_h, id_resp_p
insert into intermediateStream;
from intermediateStream#window.timeBatch(1 min)
select ts, cast(count(ts), 'int') as ftp_requests
group by ts
insert into FTPOutStream;
from intermediateStream#window.timeBatch(1 min)
select id_orig_h as ip_address, cast(count(id_orig_h), 'int') as ftp_requests
group by id_orig_h
insert into FTPIPOutStream;
But there are sometimes when either the number of events in one minute take too long to be transmitted and hence query does not give correct results.
在上述情况下,您可能应该使用 externalTimeBatch window,而不是 timeBatch window。然后它会根据事件的时间戳而不是实际时间来处理事件批次。
I have seen update function is used with tables not stream, is it so?
是的。只有事件表具有 delete/update 功能。事件流没有那个功能。
And also I want 2 outputStreams populating two different bar charts from the same input stream. So is below query correct for that purpose?
是的。由于您同时导出 FTPOutStream 和 FTPIPOutStream,因此您可以使用它们来填充两个不同的条形图。