Catégories :

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

HLL_COMBINE

Combine (fusionne) les états d’entrée en un seul état de sortie.

Cela permet des scénarios dans lesquels HLL_ACCUMULATE est exécuté sur des partitions horizontales de la même table, générant un état d’algorithme pour chaque partition de la table. Ces états peuvent ensuite être combinés à l’aide de HLL_COMBINE, produisant le même état de sortie qu’une seule exécution de HLL_ACCUMULATE sur la table entière.

Voir aussi :

HLL , HLL_ACCUMULATE , HLL_ESTIMATE

Syntaxe

HLL_COMBINE([DISTINCT] state)
Copy

Arguments

state

Expression contenant des informations d’état générées par un appel à HLL_ACCUMULATE.

Notes sur l’utilisation

  • DISTINCT est pris en charge syntaxiquement, mais n’a aucun effet.

  • La sortie de cette fonction n’est pas entièrement déterminante. L’exécution de cette fonction sur les mêmes entrées peut donner des résultats différents à des moments différents. Les différences sont généralement faibles et sont cohérentes avec le fait que les fonctions HLL_* sont des fonctions d’approximation.

Exemples

Cet exemple montre comment utiliser les trois fonctions associées HLL_ACCUMULATE, HLL_ESTIMATE et HLL_COMBINE.

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

-- Create a sequence to use to generate values for the table.
CREATE OR REPLACE SEQUENCE seq92;
CREATE OR REPLACE TABLE sequence_demo (c1 INTEGER DEFAULT seq92.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

Créez une table contenant « l’état » qui représente les informations de cardinalité approximative actuelles de la table nommée sequence_demo :

CREATE OR REPLACE TABLE resultstate1 AS (
     SELECT hll_accumulate(c1) AS rs1
        FROM sequence_demo);
Copy

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

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

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

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

CREATE OR REPLACE TABLE combined_resultstate (c1) AS 
  SELECT hll_combine(rs1) AS apc1
    FROM (
        SELECT rs1 FROM resultstate1
        UNION ALL
        SELECT rs1 FROM resultstate2
      )
      ;
Copy

Obtenez la cardinalité approximative de l’ensemble combiné de lignes :

SELECT hll_estimate(c1) FROM combined_resultstate;
Copy

Sortie :

+------------------+
| HLL_ESTIMATE(C1) |
|------------------|
|               12 |
+------------------+
Copy