uniq
Introduit dans : v1.1.0 Calcule le nombre approximatif de valeurs distinctes de l’argument. La fonction utilise un algorithme d’échantillonnage adaptatif. Pour l’état de calcul, la fonction utilise un échantillon pouvant contenir jusqu’à 65536 valeurs de hachage d’éléments. Cet algorithme est très précis et très efficace en termes d’utilisation du CPU. Lorsque la requête contient plusieurs de ces fonctions, l’utilisation de uniq est presque aussi rapide que celle d’autres fonctions d’agrégation.Détails d’implémentation
Détails d’implémentation
Cette fonction calcule un hash pour tous les paramètres de l’agrégat, puis l’utilise dans les calculs.
Elle utilise un algorithme d’échantillonnage adaptatif.
Pour l’état de calcul, la fonction utilise un échantillon pouvant contenir jusqu’à 65536 valeurs de hachage d’éléments.
Cet algorithme est très précis et très efficace en termes d’utilisation du CPU.
Lorsque la requête contient plusieurs de ces fonctions, l’utilisation de
uniq est presque aussi rapide que celle d’autres fonctions d’agrégation.L’échantillon conserve des hachages 32 bits, qui ne permettent pas de distinguer plus de quelques milliards de valeurs ; c’est pourquoi
un petit échantillon très clairsemé de hachages 64 bits complets est également maintenu (environ un hachage pour 262144 valeurs,
dans la limite de 16384 hachages), et l’estimation bascule sur celui-ci aux alentours de deux milliards. L’estimation reste ainsi
précise (à environ 1 % près) pour des cardinalités de plusieurs centaines de milliards et au-delà, là où les serveurs antérieurs
à la version 26.8 renvoyaient des résultats aberrants (issue #6078). Les états écrits par ces serveurs ne contiennent pas d’échantillon 64 bits ;
lors d’une fusion avec ces états, les valeurs qui en proviennent ne bénéficient donc que de la précision 32 bits.x— La fonction accepte un nombre variable de paramètres.Tuple(T)ouArray(T)ouDateouDateTimeouStringou(U)Int*ouFloat*ouDecimal
UInt64
Exemples
Exemple d’utilisation
Query
Response
Query
Response