Passer au contenu principal

uniqCombined

Introduit dans : v1.1.0 Calcule le nombre approximatif de valeurs d’argument distinctes. Le résultat est déterministe (il ne dépend pas de l’ordre de traitement de la requête).
Comme cette fonction utilise un hachage sur 32 bits pour les types autres que String, le résultat présentera une erreur très élevée pour des cardinalités nettement supérieures à UINT_MAX (l’erreur augmentera rapidement au-delà de quelques dizaines de milliards de valeurs distinctes). Si les cardinalités dépassent UINT_MAX, vous devez utiliser uniqCombined64 à la place.
Par rapport à la fonction uniq, la fonction uniqCombined :
  • Consomme plusieurs fois moins de mémoire
  • Offre une précision plusieurs fois supérieure
  • Présente généralement des performances légèrement inférieures. Dans certains cas, uniqCombined peut être plus performant que uniq, par exemple avec des requêtes distribuées qui transmettent un grand nombre d’états d’agrégation sur le réseau
Cette fonction calcule un hachage (sur 64 bits pour String, sinon sur 32 bits) pour tous les paramètres de l’agrégat, puis l’utilise dans les calculs. Elle combine trois algorithmes : tableau, table de hachage et HyperLogLog avec une table de correction des erreurs :
  • Pour un petit nombre d’éléments distincts, un tableau est utilisé
  • Lorsque la taille de l’ensemble augmente, une table de hachage est utilisée
  • Pour un plus grand nombre d’éléments, HyperLogLog est utilisé, ce qui occupe une quantité fixe de mémoire
Syntaxe
uniqCombined(HLL_precision)(x[, ...])
uniqCombined(x[, ...])
Paramètres
  • HLL_precision — Facultatif. Le logarithme en base 2 du nombre de cellules dans HyperLogLog. La valeur par défaut est 17, ce qui correspond en pratique à 96 KiB d’espace (2^17 cellules, 6 bits chacune). Plage : [12, 20]. UInt8
Arguments Valeur renvoyée Renvoie un nombre de type UInt64 représentant le nombre approximatif de valeurs d’arguments distinctes. UInt64 Exemples Utilisation de base
Query
SELECT uniqCombined(number) FROM numbers(1e6);
Response
┌─uniqCombined(number)─┐
│              1001148 │
└──────────────────────┘
Avec une précision personnalisée
Query
SELECT uniqCombined(15)(number) FROM numbers(1e5);
Response
┌─uniqCombined(15)(number)─┐
│                   100768 │
└──────────────────────────┘
Voir aussi
Dernière modification le 29 juin 2026