滑动窗口

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_stream
GROUP 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_stream
GROUP BY server_id;

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



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值