0

如何计算流中前 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?

4

1 回答 1

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.

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

SELECT fss_topk(top_10_x) FROM v
于 2017-06-20T20:43:55.507 回答