uniqCombined64
Introduit dans : v20.1.0
Calcule le nombre approximatif de valeurs d’argument distinctes.
C’est la même chose que uniqCombined, mais utilise un hachage 64 bits pour tous les types de données au lieu de l’utiliser uniquement pour le type de données String.
Cette fonction fournit un résultat déterministe (il ne dépend pas de l’ordre de traitement de la requête).
Comparée à la fonction uniq, la fonction uniqCombined64 :
- Consomme plusieurs fois moins de mémoire
- Offre une précision plusieurs fois supérieure
Détails d’implémentation
Cette fonction calcule un hachage 64 bits pour tous les types de données et pour tous les paramètres de l’agrégat, puis l’utilise dans les calculs. Elle repose sur une combinaison de trois algorithmes : tableau, table de hachage et HyperLogLog, avec une table de correction d’erreur :
- 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
uniqCombined64(HLL_precision)(x[, ...])
uniqCombined64(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 à 96 Kio d’espace (2^17 cellules, 6 bits chacune). Plage : [12, 20].UInt8
Arguments
x— Un nombre variable de paramètres.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
Exemple sur un jeu de données volumineux
SELECT uniqCombined64(number) FROM numbers(1e10);┌─uniqCombined64(number)─┐
│ 9998568925 │
└────────────────────────┘Comparaison avec uniqCombined
-- uniqCombined64 with large dataset
SELECT uniqCombined64(number) FROM numbers(1e10);
-- uniqCombined with same dataset shows poor approximation
SELECT uniqCombined(number) FROM numbers(1e10);┌─uniqCombined64(number)─┐
│ 9998568925 │
└────────────────────────┘
┌─uniqCombined(number)─┐
│ 5545308725 │
└──────────────────────┘Voir aussi