カテゴリ:

集計関数 (頻度推定)、 ウィンドウ関数

APPROX_TOP_K

Space-Savingを使用して、入力内の最も頻度の高い値の近似値とその近似頻度を返します。

出力は、配列の JSON 配列です。内部配列では、最初のエントリは入力の値であり、2番目のエントリは入力の推定頻度に対応しています。外側の配列には k のアイテムが含まれ、頻度の降順に並べ替えられています。

APPROX_TOP_Kの詳細については、 頻繁な値の推定 をご参照ください。

こちらもご覧ください:

APPROX_TOP_K_ACCUMULATEAPPROX_TOP_K_COMBINEAPPROX_TOP_K_ESTIMATE

構文

集計関数

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

ウィンドウ関数

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

引数

  • :最も一般的な値を検索する式(列名など)です。

  • k:カウントを概算する値の数です。たとえば、最も一般的な上位10個の値を表示する場合は、 k を10に設定します。

    k が省略された場合、デフォルトは 1 です。

    最大値は 100000 (100,000)であり、アイテムが出力に収まらない場合は自動的に削減されます。

  • カウンター:これは、推定プロセス中に一度に追跡できる個別の値の最大数です。例えば、 カウンター が100000に設定されている場合、アルゴリズムは100,000の異なる値を追跡し、100,000の最も頻繁な値を維持しようとします。

    カウンター の最大数は 100000 (100,000)です。

式4

これは、行をパーティションにグループ化するために使用されるオプションの式です。

使用上の注意

  • カウンター の数が多い場合、近似はより正確になるため、ほとんどの場合、 カウンターk よりもかなり大きくなります。(各カウンタは少量のメモリのみを使用するため、カウンターの数を増やしてもメモリに関しては高くありません)

  • ウィンドウ関数として使用する場合:

    • この関数は次をサポートしていません。

      • OVER()句のORDER BY サブ句。

      • ウィンドウフレーム。

SELECT APPROX_TOP_K(C4) FROM lineitem;

--------------------+
 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);

-------+-----------+
 VALUE | FREQUENCY |
-------+-----------|
     1 |    124923 |
     2 |    107093 |
     3 |     89438 |
-------+-----------+