在 PipelineDB 中滑动 Windows 与 TTL

Sliding Windows vs TTL in 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 连续视图的结果相同;

有人可以帮助我了解 "ttl" 和 "sw" 运算符在连续观看中的用法区别吗?

谢谢。

我将在这里对每一个进行定义,希望能够阐明两者之间的区别:

TTL - 提示收割者可以在后台删除任何早于此的行。如果收割者没有抽出时间删除 TTL 过期的行,那么在读取时它们可能仍然可见。

滑动window - 读取时只考虑这个window内的数据。指定 window 之外的数据在读取时将永远不可见。滑动 windows 在内部使用 TTL 使旧行过期,并且它们还在读取时对滑动 window 进行最终聚合。

Can somebody please help me to understand the difference between the usage of "ttl" and "sw" operator on continuous views.

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;

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

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