在PipelineDB中滑动Windows与TTL

时间:2017-12-12 12:29:03

标签: pipelinedb

我是PipelineDB和流分析的新手,

我有这两个SQL命令;

CREATE CONTINUOUS VIEW timing_hashtags WITH (sw = '1 minutes')
AS SELECT h, minute(arrival_timestamp) as minuteOfArrival, COUNT(*) as quantity
FROM hashtag_stream GROUP BY h, minuteOfArrival;

CREATE CONTINUOUS VIEW timing_hashtagsTTL WITH (ttl = '1 minute', ttl_column = 'minuteOfArrival')
AS SELECT h, minute(arrival_timestamp) as minuteOfArrival, COUNT(*) as quantity
FROM hashtag_stream GROUP BY h, minuteOfArrival;

当我在两个连续视图上运行以下查询时;

SELECT * FROM timing_hastags order by minuteOfArrival desc;

timing_hastags和timing_hastagsTTL连续视图的结果相同;

enter image description here

有人可以帮助我理解连续视图中“ttl”和“sw”运算符的使用之间的区别。

谢谢。

1 个答案:

答案 0 :(得分:1)

我将在这里定义每一个,以希望澄清两者之间的区别:

TTL - 提醒收割者可以在后台删除任何比此更早的行。因此,如果收割者没有去除它们,那么在读取时可能仍然可以看到TTL过期的行。

滑动窗口 - 仅在读取时考虑此窗口内的数据。在指定窗口之外的数据在读取时将永远不可见。滑动窗口在内部使用TTL来使旧行到期,并且它们还在读取时在滑动窗口上进行最终聚合。

  

有人可以帮我理解一下之间的区别   在连续视图中使用“ttl”和“sw”运算符。

CREATE CONTINUOUS VIEW timing_hashtags WITH (sw = '1 minutes') 
  AS SELECT h, minute(arrival_timestamp) as minuteOfArrival, COUNT(*) as quantity 
FROM hashtag_stream GROUP BY h, minuteOfArrival;

每当滑动窗口CV包含时间戳列时,使用没有滑动窗口的TTL几乎总是更好。原因是在读取时间将执行最后1分钟的最终聚合,这可能是不必要的,因为每行已经在分钟级别聚合。在内部,SW CV将以比1分钟更高的粒度聚合(例如,每分钟会有很多行),并在读取时间的最后一分钟聚合这些行。

从此CV定义中删除minuteOfArrival可能会使SW语义更清晰。即使没有minuteOfArrival,您也只能看到从简历中读取的最后一分钟的数据。

相关问题