Catégories :

Fonctions d’agrégation (Percentile Estimation) , Syntaxe et utilisation des fonctions de fenêtre

APPROX_PERCENTILE_ACCUMULATE

Renvoie la représentation interne de l’état t-Digest (sous forme d’un objet JSON) à la fin de l’agrégation. (Pour plus d’informations sur t-Digest, voir : Estimation des valeurs centiles.)

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:

  • Combiné (c’est-à-dire fusionné) avec d’autres états intermédiaires provenant de lots de données distincts mais liés.

  • Traité par d’autres fonctions qui agissent directement sur l’état intermédiaire, par exemple, APPROX_PERCENTILE_ESTIMATE. (Pour un exemple, voir la section Exemples ci-dessous.)

  • Exporté vers des outils externes.

Voir aussi :

APPROX_PERCENTILE_COMBINE , APPROX_PERCENTILE_ESTIMATE

Syntaxe

APPROX_PERCENTILE_ACCUMULATE( <expr> )

Arguments

expr

Une expression valide, telle qu’un nom de colonne, qui donne une valeur numérique.

Notes sur l’utilisation

  • Le centile ne fonctionne que sur les valeurs numériques. Par conséquent, expr doit générer des valeurs numériques ou être convertie en nombres.

  • Les valeurs décimales à virgule flottante (DECFLOAT) ne sont pas prises en charge.

Exemple

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.

Créez une table et des données simples :

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

Utilisez ces informations d’état pour afficher l’estimation actuelle de la valeur médiane (0,5 signifie que nous voulons la valeur au 50e centile) :

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

Créez maintenant une deuxième table et ajoutez des données. (Dans une situation plus réaliste, l’utilisateur aurait pu charger plus de données dans la première table et les diviser en ensembles ne se chevauchant pas en fonction de l’heure à laquelle les données ont été chargées.)

CREATE OR REPLACE TABLE test_table2 (c1 INTEGER);
INSERT INTO test_table2 (c1) VALUES (5), (6), (7), (8);

Obtenez les informations « d’état » pour les nouvelles données uniquement.

CREATE OR REPLACE TABLE resultstate2 AS
  (SELECT APPROX_PERCENTILE_ACCUMULATE(c1) AS rs1
     FROM test_table2);

Combiner les informations « d’état » pour les deux lots de lignes :

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

Obtenir la valeur médiane approximative de l’ensemble des lignes combinées :

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