APPROX_TOP_K¶
Space-Savingを使用して、入力内の最も頻度の高い値の近似値とその近似頻度を返します。
出力は、配列の JSON 配列です。内部配列では、最初のエントリは入力の値であり、2番目のエントリは入力の推定頻度に対応しています。外側の配列には k
のアイテムが含まれ、頻度の降順に並べ替えられています。
APPROX_TOP_Kの詳細については、 頻繁な値の推定 をご参照ください。
- こちらもご参照ください。
APPROX_TOP_K_ACCUMULATE、 APPROX_TOP_K_COMBINE、 APPROX_TOP_K_ESTIMATE
構文¶
集計関数
APPROX_TOP_K( <expr> [ , <k> [ , <counters> ] ] )
ウィンドウ関数
APPROX_TOP_K( <expr> [ , <k> [ , <counters> ] ] ) OVER ( [ PARTITION BY <expr4> ] )
引数¶
expr
: 最も一般的な値を検索する式(例: 列名)。k
: カウントを概算する値の数。たとえば、最も一般的な上位10個の値を表示する場合は、k
を10に設定します。k
が省略された場合、デフォルトは1
です。最大値は
100000
(100,000)であり、アイテムが出力に収まらない場合は自動的に削減されます。counters
: 推定プロセス中に一度に追跡できる個別の値の最大数。例えば、counters
が100000に設定されている場合、アルゴリズムは100,000の異なる値を追跡し、100,000の最も頻繁な値を維持しようとします。counters
の最大数は100000
(100,000)です。
expr4
これは、行をパーティションにグループ化するために使用されるオプションの式です。
使用上の注意¶
counters
の数が多い場合、近似はより正確になるため、ほとんどの場合、counters
は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 |
-------+-----------+