次の方法で共有


approx_top_k 集計関数

適用対象: check marked yes Databricks SQL 「はい」のチェック マーク Databricks Runtime 10.4 LTS 以降

expr 内で最も頻繁に出現する項目値の上位 k 個を概算数と共に返します。

構文

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

この関数は、OVER 句を使用して ウィンドウ 関数として呼び出すこともできます。

引数

  • expr: STRING、BOOLEAN、DATE、TIMESTAMP、または数値型の式。
  • k: 0 より大きい省略可能な INTEGER リテラル。 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}]