Kategorien:

Aggregatfunktionen (Häufigkeitsschätzung), Fensterfunktionen

APPROX_TOP_K_ESTIMATE

Gibt die approximierten häufigsten Werte und ihre geschätzte Häufigkeit für den angegebenen Space-Saving-Status zurück. (Weitere Informationen zum Space-Saving-Überblick finden Sie unter Schätzen häufiger Werte.)

Ein durch APPROX_TOP_K_ACCUMULATE und APPROX_TOP_K_COMBINE erzeugter Space-Saving-Status kann verwendet werden, um mit der Funktion APPROX_TOP_K_ESTIMATE die Kardinalitätsschätzung zu berechnen.

APPROX_TOP_K_ESTIMATE(APPROX_TOP_K_ACCUMULATE(…)) ist somit äquivalent zu APPROX_TOP_K(…).

Siehe auch:

APPROX_TOP_K , APPROX_TOP_K_ACCUMULATE , APPROX_TOP_K_COMBINE

Syntax

APPROX_TOP_K_ESTIMATE( <state> [ , <k> ] )

Argumente

Status

Ein Ausdruck, der Statusinformationen enthält, die durch einen Aufruf von APPROX_TOP_K_ACCUMULATE oder APPROX_TOP_K_COMBINE generiert wurden.

k

Anzahl der Werte, deren Zählwerte approximiert werden sollen. 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.

Rückgabewerte

Gibt einen Wert vom Typ ARRAY zurück.

Beispiele

In diesem Beispiel wird die Verwendung der drei verwandten Funktionen APPROX_TOP_K_ACCUMULATE, APPROX_TOP_K_ESTIMATE und APPROX_TOP_K_COMBINE veranschaulicht.

Bemerkung

In diesem Beispiel werden mehr Zähler als unterschiedliche Datenwerte verwendet, um konsistente Ergebnisse zu erhalten. In realen Anwendungen ist die Anzahl der unterschiedlichen Werte in der Regel größer als die Anzahl der Zähler, sodass Sie Näherungswerte erhalten, die variieren können.

In diesem Beispiel wird eine Tabelle mit 8 Zeilen und den Werten 1-8 sowie eine zweite Tabelle mit 8 Zeilen und den Werten 5-12 generiert. Daher sind die häufigsten Werte in der Vereinigung der beiden Tabellen die Werte 5 bis 8, von denen jeder eine Zählwert von 2 hat.

Erstellen Sie eine einfache Tabelle und Daten:

-- Create a sequence to use to generate values for the table.
CREATE OR REPLACE SEQUENCE seq91;
CREATE OR REPLACE TABLE sequence_demo (c1 INTEGER DEFAULT seq91.nextval, dummy SMALLINT);
INSERT INTO sequence_demo (dummy) VALUES (0);

-- Double the number of rows a few times, until there are 8 rows:
INSERT INTO sequence_demo (dummy) SELECT dummy FROM sequence_demo;
INSERT INTO sequence_demo (dummy) SELECT dummy FROM sequence_demo;
INSERT INTO sequence_demo (dummy) SELECT dummy FROM sequence_demo;

Erstellen Sie eine Tabelle, die den „Status“ enthält, der die aktuellen approximierten Informationen zu den K häufigsten Werten für die Tabelle namens sequence_demo darstellt:

CREATE OR REPLACE TABLE resultstate1 AS (
     SELECT approx_top_k_accumulate(c1, 50) AS rs1
        FROM sequence_demo);

Erstellen Sie nun eine zweite Tabelle, und fügen Sie Daten hinzu. (In einer realistischeren Situation hätte der Benutzer möglicherweise mehr Daten in die erste Tabelle geladen und die Daten anhand der Zeit, zu der die Daten geladen wurden, in nicht überlappende Sätze unterteilt.)

CREATE OR REPLACE TABLE test_table2 (c1 INTEGER);
-- Insert data.
INSERT INTO test_table2 (c1) SELECT c1 + 4 FROM sequence_demo;

Rufen Sie die „Statusinformationen“ nur für die neuen Daten ab.

CREATE OR REPLACE TABLE resultstate2 AS 
  (SELECT approx_top_k_accumulate(c1, 50) AS rs1 
     FROM test_table2);

Kombinieren Sie die „Statusinformationen“ für die zwei Mengen von Zeilen:

CREATE OR REPLACE TABLE combined_resultstate (c1) AS 
  SELECT approx_top_k_combine(rs1) AS apc1
    FROM (
        SELECT rs1 FROM resultstate1
        UNION ALL
        SELECT rs1 FROM resultstate2
      )
      ;

Ermitteln Sie den approximierten Top K-Wert der kombinierten Zeilenmenge:

SELECT approx_top_k_estimate(c1, 4) FROM combined_resultstate;

Ausgabe:

+------------------------------+
| APPROX_TOP_K_ESTIMATE(C1, 4) |
|------------------------------|
| [                            |
|   [                          |
|     5,                       |
|     2                        |
|   ],                         |
|   [                          |
|     6,                       |
|     2                        |
|   ],                         |
|   [                          |
|     7,                       |
|     2                        |
|   ],                         |
|   [                          |
|     8,                       |
|     2                        |
|   ]                          |
| ]                            |
+------------------------------+