- Kategorien:
Aggregationsfunktionen (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:
Syntax¶
APPROX_TOP_K_ESTIMATE( <state> [ , <k> ] )
Argumente¶
state
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 Standardwert1
.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 | | ] | | ] | +------------------------------+