PipelineDB,获取前 K 个项目的计数

PipelineDB, get counts for top K items

如何计算流中前 K 个值的频率?

假设我们有一个流

CREATE STREAM stream (
  value number
);

我们插入了十行

INSERT INTO stream (value) VALUES (1)
INSERT INTO stream (value) VALUES (1)
INSERT INTO stream (value) VALUES (1)
INSERT INTO stream (value) VALUES (2)
INSERT INTO stream (value) VALUES (2)
INSERT INTO stream (value) VALUES (3)
INSERT INTO stream (value) VALUES (4)
INSERT INTO stream (value) VALUES (5)
INSERT INTO stream (value) VALUES (6)
INSERT INTO stream (value) VALUES (7)

如何取回 前 2 项及其频率

value | frequency
-----------------
1     | 0.3
2     | 0.2

我想它应该以某种方式同时使用 Top K 和 Count-min Sketch?

你可以使用 fss_agg

CREATE CONTINUOUS VIEW v AS
  SELECT fss_agg(x, 10) AS top_10_x FROM some_stream

这将跟踪 x 的前 10 个最常出现的值。也可以明确给出每个值的权重:

CREATE CONTINUOUS VIEW v AS
  SELECT fss_agg_weighted(x, 10, y) AS top_10_x FROM some_stream

第一个版本隐式使用 1 的权重。

您可以使用各种 functions 来读取前 K 个值及其相关频率。例如,以下将 return 形式的元组:(value, frequency):

SELECT fss_topk(top_10_x) FROM v