- 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 :
Syntaxe¶
Fonction d’agrégation
APPROX_COUNT_DISTINCT( [ DISTINCT ] <expr1> [ , ... ] )
APPROX_COUNT_DISTINCT(*)
Fonction de fenêtre
APPROX_COUNT_DISTINCT( [ DISTINCT ] <expr1> [ , ... ] ) OVER ( [ PARTITION BY <expr2> ] )
APPROX_COUNT_DISTINCT(*) OVER ( [ PARTITION BY <expr2> ] )
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.*)
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%')
EXCLUDE filtre les noms de colonnes qui ne correspondent pas à la / aux colonnes spécifiées. Par exemple :
(* EXCLUDE col1) (* EXCLUDE (col1, col2))
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 tablemytable
:(mytable.* ILIKE 'col1%')
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;
+----------+-------------------+--------------------------+--------+
| COUNT(I) | COUNT(DISTINCT I) | APPROX_COUNT_DISTINCT(I) | HLL(I) |
|----------+-------------------+--------------------------+--------|
| 1024 | 1024 | 1007 | 1007 |
+----------+-------------------+--------------------------+--------+