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.

Siehe auch:

APPROX_TOP_K_ACCUMULATE, APPROX_TOP_K_COMBINE, APPROX_TOP_K_ESTIMATE

Syntax

Aggregatfunktion

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

Fensterfunktionen

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

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

  • counters: Maximale Anzahl diskreter Werte, die sich beim Schätzen gleichzeitig verfolgen lassen. Wenn counters 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ägt 100000 (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 sollte counters 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          |
   ]                |
 ]                  |
--------------------+
Copy
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 |
-------+-----------+
Copy