Kategorien:

Aggregatfunktionen (Frequency Estimation) , Syntax und Verwendung von 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> ] )

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.

This state information is not usually useful by itself, but can be passed to the function APPROX_TOP_K_ESTIMATE.

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.

  • Werte des Typs „decimal-float“ (DECFLOAT) werden nicht unterstützt.

Beispiele

This example shows how to use the three related functions APPROX_TOP_K_ACCUMULATE, APPROX_TOP_K_ESTIMATE, and APPROX_TOP_K_COMBINE.

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 OR REPLACE SEQUENCE seq91;
CREATE OR REPLACE TABLE sequence_demo (c1 INTEGER DEFAULT seq91.NEXTVAL, dummy SMALLINT);
INSERT INTO sequence_demo (dummy) VALUES (0);

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;

Create a table that contains the „state“ that represents the current approximate Top K information for the table named sequence_demo:

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

Now create a second table and add data. (In a more realistic situation, the user could have loaded more data into the first table and divided the data into non-overlapping sets based on the time that the data was loaded.)

CREATE OR REPLACE TABLE test_table2 (c1 INTEGER);
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;
+------------------------------+
| APPROX_TOP_K_ESTIMATE(C1, 4) |
|------------------------------|
| [                            |
|   [                          |
|     5,                       |
|     2                        |
|   ],                         |
|   [                          |
|     6,                       |
|     2                        |
|   ],                         |
|   [                          |
|     7,                       |
|     2                        |
|   ],                         |
|   [                          |
|     8,                       |
|     2                        |
|   ]                          |
| ]                            |
+------------------------------+