APPROX_TOP_K_ESTIMATE¶
返回给定 Space-Saving 状态下出现频率最高的值的近似值及其估计频率。 (有关 Space-Saving 摘要的详细信息,请参阅 估计频次值。)
由 APPROX_TOP_K_ACCUMULATE 和 APPROX_TOP_K_COMBINE 生成的 Space-Saving 状态可用于使用 APPROX_TOP_K_ESTIMATE 函数计算基数估计值。
因此,APPROX_TOP_K_ESTIMATE(APPROX_TOP_K_ACCUMULATE(...)) 等效于 APPROX_TOP_K(...)。
语法¶
APPROX_TOP_K_ESTIMATE( <state> [ , <k> ] )
实参¶
state
一个表达式,其中包含通过调用 APPROX_TOP_K_ACCUMULATE 或 APPROX_TOP_K_COMBINE 生成的状态信息。
k
要近似其计数的值数。例如,如果您想查看前 10 个最常见的值,则将
k
设置为 10。如果省略
k
,默认值为1
。最大值为
100000
(100,000),如果输出中无法容纳项目,该值将自动减小。
返回¶
返回类型 ARRAY
的值。
示例¶
此示例说明如何使用三个相关函数 APPROX_TOP_K_ACCUMULATE
、APPROX_TOP_K_ESTIMATE
和 APPROX_TOP_K_COMBINE
。
备注
此示例使用比不同数据值更多的计数器,以便获得一致的结果。在实际应用中,非重复值的数量通常大于计数器的数量,因此近似值可能会有所不同。
此示例生成一个表,其中包含值为 1-8 的 8 行,以及另一个包含 8 行的表,其值为 5-12。因此,两个表的并集中比较常见的值是值 5-8,每个值的计数为 2。
创建简单的表和数据:
-- Create a sequence to use to generate values for the table. CREATE OR REPLACE SEQUENCE seq91; CREATE OR REPLACE TABLE sequence_demo (c1 INTEGER DEFAULT seq91.nextval, dummy SMALLINT); INSERT INTO sequence_demo (dummy) VALUES (0); -- Double the number of rows a few times, until there are 8 rows: INSERT INTO sequence_demo (dummy) SELECT dummy FROM sequence_demo; INSERT INTO sequence_demo (dummy) SELECT dummy FROM sequence_demo; INSERT INTO sequence_demo (dummy) SELECT dummy FROM sequence_demo;创建一个包含“状态”的表,该“状态”表示名为 sequence_demo 的表的当前近似 Top K 信息:
CREATE OR REPLACE TABLE resultstate1 AS ( SELECT approx_top_k_accumulate(c1, 50) AS rs1 FROM sequence_demo);现在创建另一个表并添加数据。 (在更实际的情况下,用户可以将更多数据加载到第一个表中,并根据加载数据的时间将数据划分为非重叠集)。
CREATE OR REPLACE TABLE test_table2 (c1 INTEGER); -- Insert data. INSERT INTO test_table2 (c1) SELECT c1 + 4 FROM sequence_demo;仅获取新数据的“状态”信息。
CREATE OR REPLACE TABLE resultstate2 AS (SELECT approx_top_k_accumulate(c1, 50) AS rs1 FROM test_table2);合并两批行的“状态”信息:
CREATE OR REPLACE TABLE combined_resultstate (c1) AS SELECT approx_top_k_combine(rs1) AS apc1 FROM ( SELECT rs1 FROM resultstate1 UNION ALL SELECT rs1 FROM resultstate2 ) ;获取组合行集的近似 Top K 值:
SELECT approx_top_k_estimate(c1, 4) FROM combined_resultstate;输出:
+------------------------------+ | APPROX_TOP_K_ESTIMATE(C1, 4) | |------------------------------| | [ | | [ | | 5, | | 2 | | ], | | [ | | 6, | | 2 | | ], | | [ | | 7, | | 2 | | ], | | [ | | 8, | | 2 | | ] | | ] | +------------------------------+