Catégories :

Fonctions d’agrégation (estimation de la fréquence), Fonctions de la fenêtre

APPROX_TOP_K_ACCUMULATE

Renvoie le résumé Économie d’espace à la fin de l’agrégation. (Pour plus d’informations sur le résumé de Space-Saving, voir Estimation des valeurs fréquentes.)

La fonction APPROX_TOP_K abandonne son état interne intermédiaire lorsque l’estimation finale de cardinalité est renvoyée. Cependant, dans certains cas d’utilisation avancée, comme l’estimation de valeurs incrémentales fréquentes pendant le chargement en masse, vous pouvez vouloir conserver l’état intermédiaire, auquel cas vous utiliseriez APPROX_TOP_K_ACCUMULATE au lieu de APPROX_TOP_K

Contrairement à APPROX_TOP_K, APPROX_TOP_K_ACCUMULATE ne renvoie pas une estimation de la fréquence des éléments. Au lieu de cela, il renvoie l’état de l’algorithme lui-même. Plus tard, l’état intermédiaire peut être :

  • Combiné (c.-à-d. fusionné) avec des états intermédiaires à partir de lots de données distincts mais connexes.

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

  • Exporté vers des outils externes.

Voir aussi :

APPROX_TOP_K_COMBINE, APPROX_TOP_K_ESTIMATE

Syntaxe

APPROX_TOP_K_ACCUMULATE( <expr> , <counters> )

Arguments

expr : L’expression (par exemple, le nom de la colonne) pour laquelle vous voulez trouver

les valeurs les plus communes.

compteurs : Il s’agit du nombre maximal de valeurs distinctes qui

peuvent être suivies à un moment donné au cours du processus d’estimation. Par exemple, si compteurs est défini sur 100000, l’algorithme suit 100 000 valeurs distinctes, en essayant de conserver les 100 000 valeurs les plus fréquentes.

Le nombre maximal de compteurs est 100000 (100 000).

Exemples

Cet exemple montre comment utiliser les trois fonctions associées APPROX_TOP_K_ACCUMULATE, APPROX_TOP_K_ESTIMATE et APPROX_TOP_K_COMBINE.

Note

Cet exemple utilise plus de compteurs que de valeurs de données distinctes afin d’obtenir des résultats cohérents. Dans les applications réelles, le nombre de valeurs distinctes étant généralement plus grand que le nombre de compteurs, vous obtiendrez donc des approximations qui peuvent varier.

Cet exemple génère un tableau de 8 lignes ayant des valeurs de 1 à 8, et un deuxième tableau de 8 lignes ayant des valeurs de 5 à 12. Ainsi, les valeurs les plus fréquentes dans l’union des deux tables sont les valeurs 5-8, où chacune des valeurs a un compte de 2.

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

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

Créez une table qui contient « l’état » qui représente les informations Top K approximatives actuelles pour la table nommée sequence_demo :

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

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 data.
INSERT INTO test_table2 (c1) SELECT c1 + 4 FROM sequence_demo;

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

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

Obtenez la valeur Top K approximative de l’ensemble des rangées combinées :

SELECT approx_top_k_estimate(c1, 4) FROM combined_resultstate;

Sortie :

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