Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

uniqCombined

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).

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
Détails d’implémentation

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

SELECT uniqCombined(number) FROM numbers(1e6);
┌─uniqCombined(number)─┐
│              1001148 │
└──────────────────────┘

Avec une précision personnalisée

SELECT uniqCombined(15)(number) FROM numbers(1e5);
┌─uniqCombined(15)(number)─┐
│                   100768 │
└──────────────────────────┘

Voir aussi

Navigation