uniqCombined64
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.- Consomme plusieurs fois moins de mémoire
- Offre une précision plusieurs fois supérieure
Détails d’implémentation
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
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
x— Un nombre variable de paramètres.Tuple(T)ouArray(T)ouDateouDateTimeouStringou(U)Int*ouFloat*ouDecimal
UInt64
Exemples
Exemple sur un jeu de données volumineux
Query
Response
Query
Response