uniqCombined
Dado que utiliza un hash de 32 bits para los tipos que no son String, el resultado tendrá un error muy alto para cardinalidades significativamente mayores que
UINT_MAX (el error aumentará rápidamente después de unas pocas decenas de miles de millones de valores distintos).
Si las cardinalidades son mayores que UINT_MAX, debe usar uniqCombined64 en su lugar.- Consume varias veces menos memoria
- Calcula con una precisión varias veces mayor
- Normalmente tiene un rendimiento ligeramente inferior. En algunos escenarios, uniqCombined puede rendir mejor que uniq; por ejemplo, con consultas distribuidas que transmiten una gran cantidad de estados de agregación por la red
Detalles de implementación
Detalles de implementación
Esta función calcula un hash (de 64 bits para String y de 32 bits en caso contrario) para todos los parámetros de la agregación y luego lo utiliza en los cálculos.
Utiliza una combinación de tres algoritmos: array, tabla hash y HyperLogLog con una tabla de corrección de errores:
- Para una pequeña cantidad de elementos distintos, se utiliza un array
- Cuando el tamaño del conjunto es mayor, se utiliza una tabla hash
- Para una cantidad mayor de elementos, se utiliza HyperLogLog, que ocupará una cantidad fija de memoria
HLL_precision— Opcional. El logaritmo en base 2 del número de celdas de HyperLogLog. El valor predeterminado es 17, lo que en la práctica equivale a 96 KiB de espacio (2^17 celdas, de 6 bits cada una). Rango: [12, 20].UInt8
x— Un número variable de parámetros.Tuple(T)oArray(T)oDateoDateTimeoStringo(U)Int*oFloat*oDecimal
UInt64
Ejemplos
Uso básico
Query
Response
Query
Response