2017-06-20 46 views
0

如何計算頻率最高K值在流中?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

您可以使用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來讀取top-K值及其相關頻率。例如,以下將返回該形式的元組:(value, frequency)

SELECT fss_topk(top_10_x) FROM v