Kategorien:

Aggregatfunktionen (Häufigkeitsschätzung), Fensterfunktionen

APPROX_TOP_K_COMBINE

Kombiniert mehrere Eingabestatus zu einem einzigen Ausgabestatus (d. h. sie werden zusammengeführt).

Dies erlaubt Szenarien, in denen APPROX_TOP_K_ACCUMULATE für horizontale Partitionen derselben Tabelle ausgeführt wird, wodurch für jede Tabellenpartition ein algorithmischer Status erzeugt wird. Anschließend können diese Status mithilfe von APPROX_TOP_K_COMBINE zusammengefasst werden, wodurch derselbe Ausgabestatus erzeugt wird wie bei einer einzelnen Ausführung von APPROX_TOP_K_ACCUMULATE für die gesamte Tabelle.

Siehe auch:

APPROX_TOP_K_ACCUMULATE, APPROX_TOP_K_ESTIMATE

Syntax

APPROX_TOP_K_COMBINE( <state> [ , <counters> ] )
Copy

Argumente

state

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

counters

Dies ist die maximale Anzahl unterschiedlicher 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).

Rückgabewerte

Dies gibt Informationen über den Zustand der Top K-Berechnung zurück.

Diese Statusinformationen sind normalerweise nicht für sich nützlich, können jedoch an die Funktion APPROX_TOP_K_ESTIMATE übergeben werden.

Nutzungshinweise

  • Wenn counters definiert ist, verwendet der Ausgabestatus die angegebene Anzahl von Zählern.

  • Wenn counters nicht definiert ist, müssen alle Eingabestatus dieselbe Anzahl von Zählern aufweisen.

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;
Copy

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);
Copy

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;
Copy

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);
Copy

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
      )
      ;
Copy

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

SELECT approx_top_k_estimate(c1, 4) FROM combined_resultstate;
Copy

Ausgabe:

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