Passer au contenu principal

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).
Puisqu’elle utilise un hachage 64 bits pour tous les types, le résultat ne souffre pas d’une erreur très élevée pour des cardinalités nettement supérieures à UINT_MAX, contrairement à uniqCombined, qui utilise un hachage 32 bits pour les types non-String.
Comparée à la fonction uniq, la fonction uniqCombined64 :
  • Consomme plusieurs fois moins de mémoire
  • Offre une précision plusieurs fois supérieure
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 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
Query
SELECT uniqCombined64(number) FROM numbers(1e10);
Response
┌─uniqCombined64(number)─┐
│             9998568925 │
└────────────────────────┘
Comparaison avec uniqCombined
Query
-- uniqCombined64 with large dataset
SELECT uniqCombined64(number) FROM numbers(1e10);

-- uniqCombined with same dataset shows poor approximation
SELECT uniqCombined(number) FROM numbers(1e10);
Response
┌─uniqCombined64(number)─┐
│             9998568925 │ -- 10.00 billion
└────────────────────────┘
┌─uniqCombined(number)─┐
│           5545308725 │ -- 5.55 billion
└──────────────────────┘
Voir aussi
Dernière modification le 29 juin 2026