Catégories :

Fonctions d’agrégation (Cardinality Estimation) , Fonctions de fenêtre

DATASKETCHES_HLL

Renvoie une approximation de la cardinalité distincte de l’entrée (c’est-à-dire que DATASKETCHES_HLL(col1) renvoie une approximation de COUNT(DISTINCT col1)).

Cette fonction est une version de la fonction HLL HyperLogLog qui peut lire des esquisses binaires dans le format utilisé par Apache DataSketches. Pour plus d’informations, consultez la documentation Apache DataSketches.

Voir aussi :

DATASKETCHES_HLL_ACCUMULATE, DATASKETCHES_HLL_COMBINE, DATASKETCHES_HLL_ESTIMATE

Syntaxe

Fonction d’agrégation

DATASKETCHES_HLL( [ DISTINCT ] <expr1> [ , <max_log_k> ] )
Copy

Fonction de fenêtre

DATASKETCHES_HLL( [ DISTINCT ] <expr1> [ , <max_log_k> ] )
  OVER ( [ PARTITION BY <expr2> ] )
Copy

Arguments obligatoires

expr1

L’expression pour laquelle vous souhaitez connaître le nombre de valeurs distinctes.

Arguments facultatifs

max_log_k

La valeur maximale, en log2, de K pour initialiser l’objet HLL datasketches. Spécifiez une valeur INTEGER comprise entre 4 et 21 inclus. Pour plus d’informations, consultez la documentation Apache DataSketches.

Par défaut : 12

expr2

Expression facultative utilisée pour regrouper les lignes dans des partitions.

Renvoie

La fonction renvoie une valeur de type DOUBLE.

Si l’entrée est vide, la sortie est 0.0.

Notes sur l’utilisation

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

  • La fonction prend en charge les arguments qui sont des valeurs des types de données suivants :

    • Types de données Chaîne et Binaire (par exemple, VARCHAR et BINARY).

      Par exemple, les appels de fonction suivants sont pris en charge :

      SELECT DATASKETCHES_HLL_ACCUMULATE(1::TEXT);
      
      Copy
      SELECT DATASKETCHES_HLL_ACCUMULATE(TO_BINARY(HEX_ENCODE(1), 'HEX'));
      
      Copy
    • Types de données pour les numéros en virgule flottante (par exemple, FLOAT et DOUBLE)

      La bibliothèque DataSketches convertit ces valeurs en valeurs DOUBLE.

    • Types de données pour les numéros à virgule fixe (par exemple, INTEGER et NUMERIC).

      La fonction ne prend en charge que les types numériques avec une échelle de 0. Toutefois, vous pouvez convertir des valeurs numériques avec une échelle différente de 0 en un type de données pour un nombre à virgule flottante.

      La bibliothèque DataSketches convertit ces valeurs dans l’intervalle d’une valeur INTEGER signée de 64 bits à une valeur INTEGER signée de 64 bits.

      La bibliothèque DataSketches ne convertit pas directement les valeurs INTEGER dépassant la plage de valeurs INTEGER signées de 64 bits (telles que les valeurs entières de 128 bits). Cependant, Snowflake prend toujours en charge ces valeurs en les convertissant automatiquement en valeurs DOUBLE, que DataSketches prend en charge. Ce comportement est identique à celui de la bibliothèque datasketches-python.

    Les valeurs d’autres types de données ne sont pas prises en charge. Par exemple, les valeurs VARIANT et ARRAY ne sont pas prises en charge.

  • Pour plus d’informations sur les valeurs NULL et les fonctions d’agrégation, voir Fonctions d’agrégation et valeurs NULL.

  • Lorsque cette fonction est appelée en tant que fonction de fenêtre, elle ne prend pas en charge :

    • Une clause ORDER BY dans la clause OVER.

    • Cadres de fenêtre explicites.

Exemples

Créer une table et insérer des valeurs :

CREATE OR REPLACE TABLE datasketches_demo(v INT, g INT);

INSERT INTO datasketches_demo SELECT 1, 1;
INSERT INTO datasketches_demo SELECT 2, 1;
INSERT INTO datasketches_demo SELECT 2, 1;
INSERT INTO datasketches_demo SELECT 2, 1;
INSERT INTO datasketches_demo SELECT 1, 2;
INSERT INTO datasketches_demo SELECT 1, 2;
INSERT INTO datasketches_demo SELECT 4, 2;
INSERT INTO datasketches_demo SELECT 4, 2;
INSERT INTO datasketches_demo SELECT 5, 2;
Copy

Les exemples suivants utilisent les données de la table.

Renvoi de la cardinalité estimée des données groupées dans une colonne

Utilisez la fonction DATASKETCHES_HLL pour obtenir une approximation de la cardinalité distincte des données de la colonne v groupées par valeurs dans la colonne g.

SELECT g,
       DATASKETCHES_HLL(v),
       COUNT(DISTINCT v)
  FROM datasketches_demo GROUP BY g;
Copy
+---+---------------------+-------------------+
| G | DATASKETCHES_HLL(V) | COUNT(DISTINCT V) |
|---+---------------------+-------------------|
| 1 |         2.000000005 |                 2 |
| 2 |         3.000000015 |                 3 |
+---+---------------------+-------------------+

La sortie montre que pour la valeur 1 dans la colonne g, il y a environ deux valeurs distinctes dans la colonne v (c’est-à-dire 1 et 2). Pour la valeur 2 dans la colonne g, il y a environ trois valeurs distinctes dans la colonne v (c’est-à-dire 1, 4 et 5). L’appel COUNT(DISTINCT v)) renvoie le nombre exact de valeurs distinctes au lieu d’une estimation.

Si vous utilisez la fonction DATASKETCHES_HLL_ACCUMULATE pour créer des esquisses binaires à partir des données groupées, la fonction DATASKETCHES_HLL_ESTIMATE renvoie les mêmes résultats pour les esquisses cumulées. Pour un exemple, voir Renvoi de l’estimation de la cardinalité pour les esquisses binaires accumulées.

Renvoi de la cardinalité estimée de toutes les données d’une colonne

Utilisez la fonction DATASKETCHES_HLL pour obtenir une approximation de la cardinalité distincte de toutes les données de la colonne v.

SELECT DATASKETCHES_HLL(v),
       COUNT(DISTINCT v)
  FROM datasketches_demo;
Copy
+---------------------+-------------------+
| DATASKETCHES_HLL(V) | COUNT(DISTINCT V) |
|---------------------+-------------------|
|          4.00000003 |                 4 |
+---------------------+-------------------+

La sortie montre qu’il y a environ quatre valeurs distinctes dans la colonne v (c’est-à-dire 1, 2, 4 et 5). L’appel COUNT(DISTINCT v)) renvoie le nombre exact de valeurs distinctes au lieu d’une estimation.

Si vous utilisez la fonction DATASKETCHES_HLL_ACCUMULATE pour créer des esquisses binaires à partir des données groupées, puis la fonction DATASKETCHES_HLL_COMBINE pour combiner les esquisses en une esquisse unifiée, la fonction DATASKETCHES_HLL_ESTIMATE renvoie les mêmes résultats pour l’esquisse unifiée. Pour un exemple, voir Renvoi de l’estimation de la cardinalité pour les esquisses binaires combinées.