Kategorien:

Aggregatfunktionen (Percentile Estimation) , Syntax und Verwendung von Fensterfunktionen

APPROX_PERCENTILE_ACCUMULATE

Gibt am Ende der Aggregation die interne Darstellung des t-Digest-Status zurück (als JSON-Objekt). (Weitere Informationen zu t-Digest finden Sie unter: Schätzen von Perzentilwerten.)

The function APPROX_PERCENTILE discards this internal, intermediate state when the final percentile estimate is returned. However, in certain advanced use cases, such as estimating incremental percentile during bulk loading, you may wish to keep the intermediate state, in which case you would use APPROX_PERCENTILE_ACCUMULATE instead of APPROX_PERCENTILE.

APPROX_PERCENTILE_ACCUMULATE does not return a percentile value. Instead, it returns the algorithm state itself. The intermediate state can later be:

  • Kombiniert (d. h. zusammengeführt) mit anderen Zwischenstatus aus separaten, aber verwandten Datenbatches.

  • Verarbeitet durch andere Funktionen, die direkt mit dem Zwischenstatus operieren, z. B. APPROX_PERCENTILE_ESTIMATE. (Ein Beispiel dazu finden Sie unten im Abschnitt „Beispiele“.)

  • Exportiert in externe Tools.

Siehe auch:

APPROX_PERCENTILE_COMBINE, APPROX_PERCENTILE_ESTIMATE

Syntax

APPROX_PERCENTILE_ACCUMULATE( <expr> )

Argumente

expr

Ein gültiger Ausdruck, z. B. ein Spaltenname, der einen numerischen Wert ergibt.

Nutzungshinweise

  • Perzentile funktionieren nur bei numerischen Werten. Daher muss expr Werte erzeugen, die Zahlen sind oder in Zahlen umgewandelt werden können.

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

Beispiel

Store the t-Digest state of the testtable.c1 column in a table and then use the state to compute percentiles:

CREATE OR REPLACE TABLE resultstate AS
  SELECT APPROX_PERCENTILE_ACCUMULATE(c1) AS s
    FROM testtable;

SELECT APPROX_PERCENTILE_ESTIMATE(s, 0.015)
  FROM resultstate;

SELECT APPROX_PERCENTILE_ESTIMATE(s, 0.2)
  FROM resultstate;

Here is a more extensive example that shows the usage of all three related functions: APPROX_PERCENTILE_ACCUMULATE, APPROX_PERCENTILE_ESTIMATE, and APPROX_PERCENTILE_COMBINE.

Erstellen Sie eine einfache Tabelle und Daten:

CREATE OR REPLACE TABLE test_table1 (c1 INTEGER);
INSERT INTO test_table1 (c1) VALUES (1), (2), (3), (4);

Create a table that contains the „state“ that represents the current approximate percentile information for the table named test_table1:

CREATE OR REPLACE TABLE resultstate1 AS (
  SELECT APPROX_PERCENTILE_ACCUMULATE(c1) AS rs1
    FROM test_table1);

Verwenden Sie diese Statusinformationen, um die aktuelle Schätzung des Medianwerts anzuzeigen (0,5 bedeutet, dass der Wert beim 50. Perzentil sein soll):

SELECT APPROX_PERCENTILE_ESTIMATE(rs1, 0.5)
  FROM resultstate1;
+--------------------------------------+
| APPROX_PERCENTILE_ESTIMATE(RS1, 0.5) |
|--------------------------------------|
|                                  2.5 |
+--------------------------------------+

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 INTO test_table2 (c1) VALUES (5), (6), (7), (8);

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

CREATE OR REPLACE TABLE resultstate2 AS
  (SELECT APPROX_PERCENTILE_ACCUMULATE(c1) 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_PERCENTILE_COMBINE(rs1) AS apc1
    FROM (
      SELECT rs1 FROM resultstate1
      UNION ALL
      SELECT rs1 FROM resultstate2
    );

Ermitteln Sie den approximierten Medianwert der kombinierten Zeilenmenge:

SELECT APPROX_PERCENTILE_ESTIMATE(c1, 0.5)
  FROM combined_resultstate;
+-------------------------------------+
| APPROX_PERCENTILE_ESTIMATE(C1, 0.5) |
|-------------------------------------|
|                                 4.5 |
+-------------------------------------+