Tous les produits
Search
Centre de documentation

Realtime Compute for Apache Flink:APPROX_COUNT_DISTINCT

Dernière mise à jour :Aug 21, 2026

APPROX_COUNT_DISTINCT renvoie une estimation du nombre de valeurs distinctes d'une colonne. Cette fonction sacrifie une part configurable de la précision pour réduire considérablement la surcharge d'état sur le nœud d'agrégation. Elle convient parfaitement aux cas d'utilisation à haute cardinalité, tels que le comptage des visiteurs uniques (UV), lorsque le décompte exact n'est pas requis.

Version requise : Ververica Runtime (VVR) 3.0.0 ou version ultérieure.

Quand l'utiliser

Privilégiez APPROX_COUNT_DISTINCT plutôt que COUNT DISTINCT lorsque les deux conditions suivantes sont remplies :

  • La colonne contient un grand nombre de clés distinctes (par exemple, des ID utilisateur, des jetons de session, des URL). Cette fonction n'apporte aucun avantage significatif en termes de performances pour les colonnes à faible cardinalité.

  • Le flux d'entrée ne contient pas de messages de rétractation.

Si l'une de ces conditions n'est pas satisfaite, utilisez COUNT DISTINCT à la place.

Fonctionnement

COUNT DISTINCT doit stocker chaque clé distincte dans les données d'état pour produire un résultat exact. Pour les colonnes à haute cardinalité, cela engendre une surcharge importante en lecture/écriture et devient un goulot d'étranglement pour les performances.

APPROX_COUNT_DISTINCT estime le nombre de valeurs distinctes sans stocker chaque clé. Cela élimine le goulot d'étranglement lié à l'état et permet l'optimisation miniBatch et local-global sur le nœud d'agrégation.

Le paramètre accuracy contrôle la précision du calcul. Une valeur plus élevée indique une meilleure précision, mais entraîne une surcharge d'état plus importante, ce qui réduit l'avantage en performances par rapport à COUNT DISTINCT.

Syntaxe

APPROX_COUNT_DISTINCT(col [, accuracy])

Paramètres

Paramètre Type Obligatoire Description
col Tous les types de données Oui La colonne dans laquelle compter les valeurs distinctes.
accuracy FLOAT Non La précision du calcul. Valeurs valides : (0.0, 1.0). Par défaut : 0.99. Une valeur plus élevée offre une meilleure précision au prix d'une surcharge d'état accrue, ce qui réduit l'avantage en performances par rapport à COUNT DISTINCT.

Exemple

L'exemple suivant compare les résultats avec la précision par défaut (0.99) et une précision inférieure (0.9).

Table d'entrée T1

a (VARCHAR) b (BIGINT)
Hi 1
Hi 2
Hi 3
Hi 4
Hi 5
Hi 6
Hello 1
Hello 2
Hello 3
Hello 4

Requête

SELECT
  a,
  APPROX_COUNT_DISTINCT(b) AS b,
  APPROX_COUNT_DISTINCT(b, 0.9) AS c
FROM T1
GROUP BY a;

Résultats

a (VARCHAR) b (BIGINT) c (BIGINT)
Hi 6 6
Hello 4 4

La colonne b utilise la précision par défaut de 0.99 ; la colonne c utilise 0.9.