类别:

聚合函数 (频率估算)、窗口函数

APPROX_TOP_K

使用 Space-Saving 返回输入中出现频率最高的值的近似值,以及其近似频率。

输出是一个由数组组成的 JSON 数组。在内部数组中,第一个条目是输入中的一个值,第二个条目对应于其在输入中的估计频率。外部数组包含 k 项目(按频率降序排序)。

有关 APPROX_TOP_K 的更多信息,请参阅 估计频次值

另请参阅:

APPROX_TOP_K_ACCUMULATEAPPROX_TOP_K_COMBINEAPPROX_TOP_K_ESTIMATE

语法

聚合函数

APPROX_TOP_K( <expr> [ , <k> [ , <counters> ] ] )
Copy

窗口函数

APPROX_TOP_K( <expr> [ , <k> [ , <counters> ] ] ) OVER ( [ PARTITION BY <expr4> ] )
Copy

实参

  • expr:要查找最常见值的表达式(例如,列名称)。

  • k:要近似其计数的值数。例如,如果您想查看前 10 个最常见的值,则将 k 设置为 10。

    如果省略 k,默认值为 1

    最大值为 100000 (100,000),如果输出中无法容纳项目,该值将自动减小。

  • counters:这是在估算过程中一次可以跟踪的非重复值数量上限。例如,如果 counters 设置为 100000,则算法将跟踪 100000 个不同值,尝试保留 100000 个比较频繁的值。

    counters 的数量上限是 100000 (100000)。

expr4

这是可选表达式,用于将行分组到分区。

使用说明

  • 如果 counters 的数量较多,近似值会更准确,因此在大多数情况下,counters 数量应该比 k 大得多。(每个计数器只占用少量内存,因此增加计数器的数量不会占用大量内存)。

  • 用作窗口函数时:

    • 此函数不支持:

      • OVER() 子句中的 ORDER BY 分子句。

      • 窗口框架。

示例

SELECT APPROX_TOP_K(C4) FROM lineitem;

--------------------+
 APPROX_TOP_K(C4,3) |
--------------------|
 [                  |
   [                |
     1,             |
     124923         |
   ],               |
   [                |
     2,             |
     107093         |
   ],               |
   [                |
     3,             |
     89315          |
   ]                |
 ]                  |
--------------------+
Copy
WITH states AS (
  SELECT approx_top_k(C4, 3, 5) AS state
  FROM lineitem
)
SELECT value[0]::INT AS value, value[1]::INT AS frequency
FROM states, LATERAL FLATTEN(state);

-------+-----------+
 VALUE | FREQUENCY |
-------+-----------|
     1 |    124923 |
     2 |    107093 |
     3 |     89438 |
-------+-----------+
Copy
语言: 中文