Kategorien:

Aggregatfunktionen (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.

Siehe auch:

APPROX_TOP_K_ACCUMULATE , APPROX_TOP_K_COMBINE, APPROX_TOP_K_ESTIMATE

Syntax

Aggregatfunktion

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

Fensterfunktionen

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

Argumente

  • Ausdruck: Der Ausdruck (z. B. Spaltenname), für den Sie die häufigsten Werte finden möchten.

  • k: Die Anzahl der Werte, deren Anzahl approximiert werden soll. Wenn Sie beispielsweise die 10 häufigsten Werte anzeigen möchten, setzen Sie k auf 10.

    Wenn k nicht angegeben wird, lautet der Standardwert 1.

    Der Maximalwert ist 100000 (100.000) und wird automatisch reduziert, wenn Elemente nicht in die Ausgabe passen.

  • Zähler: Dies ist die maximale Anzahl unterschiedlicher Werte, die sich beim Schätzen gleichzeitig verfolgen lassen. Wenn Zähler 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 Zähler beträgt 100000 (100.000).

Ausdruck4

Dies ist der optionale Ausdruck zum Gruppieren von Zeilen in Partitionen.

Nutzungshinweise

  • Die Approximation fällt genauer aus, wenn die Anzahl der Zähler groß ist. In den meisten Fällen sollte Zähler darum wesentlich größer sein als k. (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 |
-------+-----------+