Catégories :

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

APPROX_COUNT_DISTINCT

Utilise HyperLogLog pour obtenir une approximation de la cardinalité distincte de l’entrée (c’est-à-dire que HLL(col1, col2, ... ) renvoie une approximation de COUNT(DISTINCT col1, col2, ... )).

Pour plus d’informations sur les HyperLogLog, voir Le nombre de valeurs distinctes..

Alias :

HLL.

Voir aussi :

HLL_ACCUMULATE , HLL_COMBINE , HLL_ESTIMATE

Syntaxe

Fonction d’agrégation

APPROX_COUNT_DISTINCT( [ DISTINCT ] <expr1>  [ , ... ] )

APPROX_COUNT_DISTINCT(*)
Copy

Fonction de fenêtre

APPROX_COUNT_DISTINCT( [ DISTINCT ] <expr1>  [ , ... ] ) OVER ( [ PARTITION BY <expr2> ] )

APPROX_COUNT_DISTINCT(*) OVER ( [ PARTITION BY <expr2> ] )
Copy

Arguments

expr1

C’est l’expression pour laquelle vous voulez connaître le nombre de valeurs distinctes.

expr2

Il s’agit de l’expression facultative utilisée pour grouper des lignes dans des partitions.

*

Renvoie une approximation du nombre total d’enregistrements, à l’exclusion des enregistrements avec des valeurs NULL.

Lorsque vous transmettez un caractère générique à la fonction, vous pouvez qualifier le caractère générique avec le nom ou l’alias de la table. Par exemple, pour transmettre toutes les colonnes de la table nommée mytable, précisez les éléments suivants :

(mytable.*)
Copy

Vous pouvez également utiliser les mots-clés ILIKE et EXCLUDE pour le filtrage :

  • ILIKE filtre les noms de colonnes qui correspondent au motif spécifié. Un seul motif est autorisé. Par exemple :

    (* ILIKE 'col1%')
    
    Copy
  • EXCLUDE filtre les noms de colonnes qui ne correspondent pas à la / aux colonnes spécifiées. Par exemple :

    (* EXCLUDE col1)
    
    (* EXCLUDE (col1, col2))
    
    Copy

Les qualificatifs sont valides lorsque vous utilisez ces mots-clés. L’exemple suivant utilise le mot-clé ILIKE pour filtrer toutes les colonnes qui correspondent au motif col1% dans la table mytable :

(mytable.* ILIKE 'col1%')
Copy

Les mots-clés ILIKE et EXCLUDE ne peuvent pas être combinés dans un seul appel de fonction.

Pour cette fonction, les mots-clés ILIKE et EXCLUDE ne sont valables que dans une liste SELECT ou une clause GROUP BY.

Pour plus d’informations sur les mots-clés ILIKE et EXCLUDE, voir la section « Paramètres » dans SELECT.

Renvoie

Le type de données de la valeur renvoyée est INTEGER.

Notes sur l’utilisation

  • Bien que le calcul soit une approximation, il est déterministe. Lorsque cette fonction est appelée avec les mêmes données d’entrée, elle renvoie les mêmes résultats.

  • 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

Cet exemple montre comment utiliser APPROX_COUNT_DISTINCT et son alias HLL. Cet exemple appelle COUNT(DISTINCT i) et APPROX_COUNT_DISTINCT(i) pour souligner que les résultats ne correspondent pas toujours exactement.

Le résultat exact de la requête suivante peut varier car APPROX_COUNT_DISTINCT renvoie une approximation et non une valeur exacte.

SELECT COUNT(i), COUNT(DISTINCT i), APPROX_COUNT_DISTINCT(i), HLL(i)
  FROM sequence_demo;
Copy
+----------+-------------------+--------------------------+--------+
| COUNT(I) | COUNT(DISTINCT I) | APPROX_COUNT_DISTINCT(I) | HLL(I) |
|----------+-------------------+--------------------------+--------|
|     1024 |              1024 |                     1007 |   1007 |
+----------+-------------------+--------------------------+--------+