quantilesTiming
Introducido en: v1.1.0
Calcula varios cuantiles de una secuencia de datos numéricos en distintos niveles de forma simultánea y con una precisión determinada.
Esta función es equivalente a quantileTiming, pero permite calcular varios niveles de cuantil en una sola pasada, lo que resulta más eficiente que llamar a funciones de cuantil individuales.
El resultado es determinista (no depende del orden de procesamiento de la consulta). La función está optimizada para trabajar con secuencias que describen distribuciones, como los tiempos de carga de páginas web o los tiempos de respuesta del backend.
Exactitud
El cálculo es exacto si:
- El número total de valores no supera 5670.
- El número total de valores supera 5670, pero el tiempo de carga de la página es inferior a 1024 ms.
De lo contrario, el resultado del cálculo se redondea al múltiplo de 16 ms más cercano.
Sintaxis
quantilesTiming(level1, level2, ...)(expr)Parámetros
level— Niveles de los cuantiles. Uno o más números constantes de coma flotante de 0 a 1. Recomendamos usar valores delevelen el intervalo[0.01, 0.99].Float*
Argumentos
expr— Expresión sobre los valores de la columna que da como resultado tipos de datos numéricos,DateoDateTime. Si se pasan valores negativos a la función, el comportamiento es indefinido. Si el valor es mayor que 30.000 (un tiempo de carga de página de más de 30 segundos), se asume que es 30.000.(U)Int*oFloat*oDateoDateTime
Valor devuelto
Array de cuantiles de los niveles especificados en el mismo orden en que se especificaron dichos niveles. Array(Float32)
Ejemplos
Cálculo de varios cuantiles de tiempo
CREATE TABLE t (response_time UInt32) ENGINE = Memory;
INSERT INTO t VALUES (72), (112), (126), (145), (104), (242), (313), (168), (108);
SELECT quantilesTiming(0.25, 0.5, 0.75)(response_time) FROM t;┌─quantilesTiming(0.25, 0.5, 0.75)(response_time)─┐
│ [108,126,168] │
└─────────────────────────────────────────────────┘