滑动窗口

来源:互联网 发布:乐乎社区是什么意思 编辑:程序博客网 时间:2024/06/07 15:21

Continuous Views是随着时间持续并不断更新的,PipelineDB在更新一个流视图结果时也能考虑到当前时间。滑动窗口查询是指查询时包含where子句以及和当前时间相关的临时组件。事件集where子句过滤或接受改变。

关于一个滑动where子句有两个重要的组件

clock_timestamp()---一个内置函数用来返回当前时间戳

arrival_timestamp一个特别的属性,PipelineDB接收的包含时间的记录。

然而,没有必要显示增加where子句,PipelineDB内部实现它,只需要指定sw存储参数,在定义流视图时。

下面通过例子来显示:

尽管滑动窗口是一个新的概念,但是PipelineDB并没有使用新的或合适的语法。取而代之的,PipelineDB

还是使用PostgreSQL 9.5的语法

1、在最新的一分钟内我能查到哪些用户。

CREATE CONTINUOUS VIEW recent_users WITH(sw = '1 minute') AS

SELECT user_id::integer FROM stream;

CREATE CONTINUOUS VIEW  recent_users AS 

SELECT user_id::integer FROM stream

WHERE (arrival_timestamp>clock_timestamp()-interval ‘1 minute’);

NOTE:PipelineDB运行用户手动构造滑动窗口where子句当定义滑动窗口流视图,尽管它推荐使用sw来避免单调(tedium)

由于是查最新1分钟,所以你重新查询都会有不同的行,尽管流视图没有更新。

分析下面这一句:

(arrival_timestamp > clock_timestamp() - interval '1 minute')

(1)先计算这个:clock_timestamp() - interval '1 minute'得到的结果k

(2)arrival_timestamp >k 说明就在这个1分钟的范围内

NOTE:current_date,current_time,current_timestamp并不用在滑动窗口查询.


滑动聚集,对应有Continuous Aggregates

CREATE CONTINUOUS VIEW count_recent_users WITH (sw = '1 minute') AS   SELECT COUNT(*) FROM stream;
CREATE CONTINUOUS VIEW sensor_temps WITH (sw = '5 minutes') AS   SELECT sensor::integer, AVG(temp::numeric) FROM sensor_streamGROUP BY sensor;

What is my server’s 99th precentile response latency over the last 5 minutes?

CREATE CONTINUOUS VIEW latency WITH (sw = '5 minutes') AS   SELECT server_id::integer, percentile_cont(0.99)   WITHIN GROUP (ORDER BY latency::numeric) FROM server_streamGROUP BY server_id;

CREATE CONTINUOUS VIEW hourly (WITH sw = '1 hour', step_factor = 50)  AS SELECT COUNT(*) FROM stream;



0 0