approx_top_k 聚合函数

适用于:check marked yes Databricks SQL check marked yes Databricks Runtime 10.2 及更高版本

返回 expr 中最常出现的前 k 个项目值及其近似计数。

语法

approx_top_k(expr[, k[, maxItemsTracked]]) [FILTER ( WHERE cond ) ]

还可以使用 OVER 子句将此函数作为窗口函数调用。

参数

  • expr:STRING、BOOLEAN、DATE、TIMESTAMP 或数值类型的表达式。
  • k:大于 0 的可选整数文本。 如果未指定 k,则默认为 5
  • maxItemsTracked:大于或等于 k 的可选 INTEGER 字面值。 如果未指定 maxItemsTracked,则默认为 10000
  • cond:一个可选的布尔表达式,可筛选用于聚合的行。

返回

结果以 STRUCT 类型的 ARRAY 形式返回,其中每个 STRUCT 包含值的 item 字段(具有其原始输入类型)和 count 字段(LONG 类型)以及出现的近似次数。 数组按 count 降序排序。

此聚合函数返回表达式 expr 中最常出现的前 k 个项目值及其近似计数。 每个计数的错误最高可以为 2.0 * numRows / maxItemsTracked,其中 numRows 是总行数。 较高的 maxItemsTracked 值可提供更好的准确性,但会增加内存使用量。 具有少于 maxItemsTracked 个不同项目的表达式将产生准确的项目计数。 结果在结果中包含 NULL 值作为它们自己的项目。

示例

> SELECT approx_top_k(expr) FROM VALUES (0), (0), (1), (1), (2), (3), (4), (4) AS tab(expr);
 [{'item':4,'count':2},{'item':1,'count':2},{'item':0,'count':2},{'item':3,'count':1},{'item':2,'count':1}]

> SELECT approx_top_k(expr, 2) FROM VALUES 'a', 'b', 'c', 'c', 'c', 'c', 'd', 'd' AS tab(expr);
 [{'item':'c','count',4},{'item':'d','count':2}]

> SELECT approx_top_k(expr, 10, 100) FROM VALUES (0), (1), (1), (2), (2), (2) AS tab(expr);
 [{'item':2,'count':3},{'item':1,'count':2},{'item':0,'count':1}]