- Kategorien:
Aggregationsfunktionen (Häufigkeitsschätzung), Fensterfunktionen
APPROX_TOP_K¶
Verwendet Space-Saving, um eine Approximation der häufigsten Werte in der Eingabe zusammen mit ihren approximierten Häufigkeiten zu erhalten.
Die Ausgabe ist ein JSON-Array, das aus Arrays besteht. In den inneren Arrays ist der erste Eintrag ein Wert in der Eingabe, während der zweite Eintrag der geschätzten Häufigkeit des Werts in der Eingabe entspricht. Das äußere Array enthält k
Elemente, sortiert nach absteigender Häufigkeit.
Weitere Informationen zu APPROX_TOP_K finden Sie unter Schätzen häufiger Werte.
Syntax¶
Aggregatfunktion
APPROX_TOP_K( <expr> [ , <k> [ , <counters> ] ] )
Fensterfunktionen
APPROX_TOP_K( <expr> [ , <k> [ , <counters> ] ] ) OVER ( [ PARTITION BY <expr4> ] )
Argumente¶
expr
: Ausdruck (z. B. Spaltenname), für den Sie die häufigsten Werte finden möchten.k
: Anzahl der Werte, deren Anzahl approximiert werden soll. Wenn Sie beispielsweise die 10 häufigsten Werte anzeigen möchten, setzen Siek
auf 10.Wenn
k
nicht angegeben wird, lautet der Standardwert1
.Der Maximalwert ist
100000
(100.000) und wird automatisch reduziert, wenn Elemente nicht in die Ausgabe passen.counters
: Maximale Anzahl diskreter Werte, die sich beim Schätzen gleichzeitig verfolgen lassen. Wenncounters
beispielsweise auf „100000“ gesetzt ist, verfolgt der Algorithmus 100.000 verschiedene Werte und versucht, die 100.000 häufigsten Werte beizubehalten.Die maximale Anzahl von
counters
beträgt100000
(100.000).
expr4
Dies ist der optionale Ausdruck zum Gruppieren von Zeilen in Partitionen.
Nutzungshinweise¶
Die Approximation fällt genauer aus, wenn der Wert von
counters
groß ist. In den meisten Fällen solltecounters
darum wesentlich größer sein alsk
. (Jeder Zähler verbraucht nur wenig Arbeitsspeicher, daher kostet es in dieser Hinsicht nicht viel, die Anzahl der Zähler zu erhöhen.)
Bei Verwendung als Fensterfunktion:
Diese Funktion unterstützt nicht:
ORDER BY-Unterklausel in der OVER()-Klausel
Fensterrahmen
Beispiele¶
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 |
-------+-----------+