类别:

/sql-reference/functions-aggregation`(频率估算)、:doc:/sql-reference/functions-window`

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;
Copy
+--------------------+
| APPROX_TOP_K(C4,3) |
+--------------------+
| [                  |
|   [                |
|     1,             |
|     124923         |
|   ],               |
|   [                |
|     2,             |
|     107093         |
|   ],               |
|   [                |
|     3,             |
|    89315           |
|   ]                |
| ]                  |
+--------------------+
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);
Copy
+-------+-----------+
| VALUE | FREQUENCY |
+-------+-----------+
|     1 |    124923 |
|     2 |    107093 |
|     3 |     89438 |
+-------+-----------+
语言: 中文