Saltar al contenido principal

uniqCombined64

Introducido en: v20.1.0 Calcula el número aproximado de distintos valores de los argumentos. Es igual que uniqCombined, pero usa un hash de 64 bits para todos los tipos de datos en lugar de usarlo solo para el tipo de dato String. Esta función proporciona el resultado de forma determinista (no depende del orden de procesamiento de la consulta).
Como usa un hash de 64 bits para todos los tipos, el resultado no sufre un error muy elevado para cardinalidades significativamente mayores que UINT_MAX, como sí ocurre con uniqCombined, que usa un hash de 32 bits para los tipos que no son String.
En comparación con la función uniq, la función uniqCombined64:
  • Consume varias veces menos memoria
  • Calcula con una precisión varias veces mayor
Esta función calcula un hash de 64 bits para todos los tipos de datos de todos los parámetros del agregado y luego lo usa en los cálculos. Usa una combinación de tres algoritmos: array, tabla hash y HyperLogLog, con una tabla de corrección de errores:
  • Para un número pequeño de elementos distintos, se usa un array
  • Cuando el tamaño del conjunto aumenta, se usa una tabla hash
  • Para un número mayor de elementos, se usa HyperLogLog, que ocupará una cantidad fija de memoria
Sintaxis
uniqCombined64(HLL_precision)(x[, ...])
uniqCombined64(x[, ...])
Parámetros
  • HLL_precision — Opcional. El logaritmo en base 2 del número de celdas de HyperLogLog. El valor predeterminado es 17, lo que equivale en la práctica a 96 KiB de espacio (2^17 celdas, de 6 bits cada una). Rango: [12, 20]. UInt8
Argumentos Valor devuelto Devuelve un número de tipo UInt64 que representa la cantidad aproximada de valores de argumento distintos. UInt64 Ejemplos Ejemplo con un conjunto de datos grande
Query
SELECT uniqCombined64(number) FROM numbers(1e10);
Response
┌─uniqCombined64(number)─┐
│             9998568925 │
└────────────────────────┘
Comparación con uniqCombined
Query
-- uniqCombined64 con un conjunto de datos grande
SELECT uniqCombined64(number) FROM numbers(1e10);

-- uniqCombined con el mismo conjunto de datos muestra una aproximación deficiente
SELECT uniqCombined(number) FROM numbers(1e10);
Response
┌─uniqCombined64(number)─┐
│             9998568925 │ -- 10.00 mil millones
└────────────────────────┘
┌─uniqCombined(number)─┐
│           5545308725 │ -- 5.55 mil millones
└──────────────────────┘
Ver también
Última modificación el 10 de junio de 2026