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
x— Un nombre variable d’arguments.Tuple(T)ouArray(T)ouDateouDateTimeouStringou(U)Int*ouFloat*ouDecimal
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