uniqCombined
Introducido en: v1.1.0
Calcula el número aproximado de valores de argumento distintos. Proporciona el resultado de forma determinista (no depende del orden de procesamiento de la consulta).
En comparación con la función uniq, la función uniqCombined:
- 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
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
Sintaxis
uniqCombined(HLL_precision)(x[, ...])
uniqCombined(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 en la práctica equivale a 96 KiB de espacio (2^17 celdas, de 6 bits cada una). Rango: [12, 20].UInt8
Argumentos
x— Un número variable de parámetros.Tuple(T)oArray(T)oDateoDateTimeoStringo(U)Int*oFloat*oDecimal
Valor devuelto
Devuelve un número de tipo UInt64 que representa el número aproximado de distintos valores de argumento. UInt64
Ejemplos
Uso básico
SELECT uniqCombined(number) FROM numbers(1e6);┌─uniqCombined(number)─┐
│ 1001148 │
└──────────────────────┘Con precisión personalizada
SELECT uniqCombined(15)(number) FROM numbers(1e5);┌─uniqCombined(15)(number)─┐
│ 100768 │
└──────────────────────────┘Véase también