カテゴリ:

集計関数 (Frequency Estimation) , ウィンドウ関数

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> ] ] )
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に設定されている場合、アルゴリズムは100,000の異なる値を追跡し、100,000の最も頻繁な値を維持しようとします。

    counters の最大数は 100000 (100,000)です。

expr4

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

使用上の注意

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

  • この関数がウィンドウ関数として呼び出される場合、以下はサポートされていません。

    • 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 |
+-------+-----------+