PipelineDB,获取前K项的计数

时间:2017-06-20 01:44:37

标签: pipelinedb

如何在流中计算最高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?

1 个答案:

答案 0 :(得分:1)

您可以使用fss_agg

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

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

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

第一个版本隐含使用权重1

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

SELECT fss_topk(top_10_x) FROM v