Las funciones aproximadas estiman conteos distintos, percentiles e histogramas con un bajo costo computacional.
SLS admite las siguientes funciones aproximadas.
Si desea usar cadenas en instrucciones analíticas, debe encerrarlas entre comillas simples (''). Las cadenas sin comillas o encerradas entre comillas dobles ("") indican nombres de campo o de columna. Por ejemplo,
'status'
indica la cadena status, mientras que
status
o
"status"
indican el campo de registro status.
|
Función |
Sintaxis |
Descripción |
Compatibilidad con SQL |
Compatibilidad con SPL |
|
approx_distinct(x) |
Estima el conteo de valores distintos en x. Error estándar predeterminado: 2.3%. |
✔ |
❌ |
|
|
approx_distinct(x, e) |
Estima el conteo de valores distintos en x con un error estándar personalizado. |
✔ |
❌ |
|
|
approx_percentile(x, percentage) |
Devuelve el percentil percentage aproximado de x (ordenado de forma ascendente). |
✔ |
❌ |
|
|
approx_percentile(x, array[percentage01, percentage02...]) |
Devuelve los valores aproximados de x en los percentiles percentage01 y percentage02 (ordenados de forma ascendente). |
✔ |
❌ |
|
|
approx_percentile(x, weight, percentage) |
Devuelve el percentil percentage aproximado de x ponderado por x × weight (ordenado de forma ascendente). |
✔ |
❌ |
|
|
approx_percentile(x, weight, array[percentage01, percentage02...]) |
Devuelve los valores aproximados de x en los percentiles percentage01 y percentage02, ponderados por x × weight. |
✔ |
❌ |
|
|
approx_percentile(x, weight, percentage, accuracy) |
Devuelve el percentil percentage aproximado de x ponderado por x × weight, con precisión configurable. |
✔ |
❌ |
|
|
numeric_histogram(bucket, x) |
Calcula un histograma aproximado para x con el número de buckets especificado. Devuelve un objeto JSON. |
✔ |
❌ |
|
|
numeric_histogram(bucket, x, weight) |
Calcula un histograma aproximado ponderado para x con el número de buckets especificado. Devuelve un objeto JSON. |
✔ |
❌ |
|
|
numeric_histogram_u(bucket, x) |
Calcula un histograma aproximado para x con el número de buckets especificado. Devuelve una tabla de múltiples filas y columnas. |
✔ |
❌ |
|
|
|
Estima los |
✔ |
❌ |
Función Approx_distinct
La función approx_distinct estima el conteo de valores distintos en x.
Syntax
-
Estima el conteo de valores distintos en x. Error estándar predeterminado: 2.3%.
approx_distinct(x) -
Estima el conteo de valores distintos en x con un error estándar personalizado.
approx_distinct(x, e)
Parameters
|
Parámetro |
Descripción |
|
x |
Nombre de la columna. Admite cualquier tipo de dato. |
|
e |
Error estándar personalizado. Rango válido: [0.0115, 0.26]. |
Return value type
BIGINT
Examples
-
Ejemplo 1: Calcular PV con
county estimar UV conapprox_distincten el campoclient_ip. Error estándar: 2.3%.-
Instrucción de consulta
* | SELECT count(*) AS PV, approx_distinct(client_ip) AS UV La consulta devuelve un PV de 941,787 y un UV de 723,040.
-
-
Ejemplo 2: Calcular PV y estimar UV en el campo
client_ipcon un error estándar personalizado del 10%.-
Instrucción de consulta
* | SELECT count(*) AS PV, approx_distinct(client_ip,0.1) AS UV La consulta devuelve un PV de 9,095 y un UV de 7,946.
-
Función Approx_percentile
La función approx_percentile devuelve el percentil aproximado de x para un percentage dado. Los resultados son aproximados y no garantizan estabilidad.
Syntax
-
Devuelve el percentil percentage aproximado de x (ordenado de forma ascendente). Tipo de retorno: double.
approx_percentile(x, percentage) -
Devuelve los valores aproximados de x en los percentiles percentage01 y percentage02 (ordenados de forma ascendente). Tipo de retorno: array(double,double).
approx_percentile(x, array[percentage01, percentage02...]) -
Devuelve el percentil percentage aproximado de x ponderado por x × weight. Tipo de retorno:
double.approx_percentile(x, weight, percentage) -
Devuelve los valores aproximados de x en los percentiles percentage01 y percentage02, ponderados por x × weight. Tipo de retorno: array(double,double).
approx_percentile(x, weight, array[percentage01, percentage02...]) -
Devuelve el percentil percentage aproximado de x ponderado por x × weight, con precisión configurable. Tipo de retorno: double.
approx_percentile(x, weight, percentage, accuracy)
Parameters
|
Parámetro |
Descripción |
|
x |
Nombre de la columna. Debe ser de tipo DOUBLE. |
|
percentage |
Valor del percentil. Rango válido: [0, 1]. |
|
accuracy |
Valor de precisión. Rango válido: (0, 1). |
|
weight |
Peso. Debe ser un entero mayor que 1. Los valores se ordenan por x × weight. |
Return value type
DOUBLE o ARRAY(DOUBLE)
Examples
-
Ejemplo 1: Obtener el percentil 50 aproximado (mediana) de request_time.
-
Instrucción de consulta
* | SELECT approx_percentile(request_time, 0.5) La consulta devuelve
45.0, que corresponde a la mediana aproximada (percentil 50) derequest_time.
-
-
Ejemplo 2: Obtener los percentiles 10, 20 y 70 aproximados de request_time.
-
Instrucción de consulta
* | SELECT approx_percentile(request_time, array[0.1, 0.2, 0.7]) La consulta devuelve
[17.0, 24.0, 59.0], que son los valores aproximados derequest_timeen los percentiles 10, 20 y 70, respectivamente.
-
-
Ejemplo 3: Percentil 50 ponderado de request_time. Peso: 100 si request_time < 20; de lo contrario, 10.
-
Instrucción de consulta
* | SELECT approx_percentile( request_time, CASE WHEN request_time < 20 THEN 100 ELSE 10 END, 0.5 ) La consulta devuelve
18.0.
-
-
Ejemplo 4: Percentiles 80 y 90 ponderados de request_time. Peso: 100 si request_time < 20; de lo contrario, 10.
-
Instrucción de consulta
* | SELECT approx_percentile( request_time, CASE WHEN request_time < 20 THEN 100 ELSE 10 END, array [0.8, 0.9] ) La consulta devuelve
[48.0, 64.0].
-
-
Ejemplo 5: Percentil 50 ponderado de request_time, con precisión de 0.2. Peso: 100 si request_time < 20; de lo contrario, 10.
-
Instrucción de consulta
* | SELECT approx_percentile( request_time, CASE WHEN request_time < 20 THEN 100 ELSE 10 END, 0.5, 0.2 )
-
Función Numeric_histogram
La función numeric_histogram calcula un histograma aproximado de x con un número determinado de buckets. Devuelve un objeto JSON.
Syntax
-
Calcula un histograma aproximado para x con el número de buckets especificado.
numeric_histogram(bucket, x) -
Calcula un histograma aproximado ponderado para x con el número de buckets especificado.
numeric_histogram(bucket, x, weight)
Parameters
|
Parámetro |
Descripción |
|
bucket |
Número de buckets del histograma. Debe ser BIGINT. |
|
x |
Nombre de la columna. Debe ser de tipo DOUBLE. |
|
weight |
Peso. Debe ser un entero mayor que 0. Los valores se agrupan por x × weight. |
Return value type
JSON
Examples
-
Ejemplo 1: Calcular un histograma aproximado de las duraciones de solicitud para peticiones POST.
-
Instrucción de consulta
request_method:POST | SELECT numeric_histogram(10, request_time) Devuelve un objeto JSON que asigna los límites superiores de los buckets a sus conteos; por ejemplo,
"45.03638445951907":11351.0,"31.617058096415327":16180.0y"51.0979254315973":13786.0.
-
-
Ejemplo 2: Calcular un histograma aproximado ponderado de las duraciones de solicitud para peticiones POST.
-
Instrucción de consulta
request_method:POST | SELECT numeric_histogram(10, request_time, CASE WHEN request_time<20 THEN 100 ELSE 10 END) Devuelve una columna JSON
_col0con 10 pares clave-valor que asignan rangos a frecuencias; por ejemplo,"60.63632633267428":268070.0,"76.41340599455032":275250.0y"15.028066666666671":1500000.0.
-
Función Numeric_histogram_u
La función numeric_histogram_u calcula un histograma aproximado de x con un número determinado de buckets. Devuelve una tabla de múltiples filas y columnas.
Syntax
numeric_histogram_u(bucket, x)
Parameters
|
Parámetro |
Descripción |
|
bucket |
Número de buckets del histograma. Debe ser BIGINT. |
|
x |
Nombre de la columna. Debe ser de tipo DOUBLE. |
Return value type
Una tabla con las columnas bucket_avg y count.
Examples
Calcular un histograma aproximado de las duraciones de solicitudes POST.
-
Instrucción de consulta
request_method:POST | SELECT numeric_histogram_u(10, request_time) Devuelve 10 filas con las columnas
bucket_avgycount. Por ejemplo: bucket_avg 14.20, count 18806.0; bucket_avg 70.78, count 13442.0.
Función Approx_most_frequent
Estima los k valores más frecuentes en la columna x y sus conteos aproximados.
Sintaxis
approx_most_frequent(k, x)
Parámetros
|
Parámetro |
Descripción |
|
k |
Número de valores más frecuentes que se devolverán. Por ejemplo, 5 devuelve los 5 valores principales y sus conteos aproximados. |
|
x |
Nombre de la columna. Debe ser de tipo VARCHAR. |
Valor de retorno
map(VARCHAR, BIGINT)
Ejemplo
Obtener los tres valores más frecuentes del campo content.
-
Datos de muestra
content: 'A' 'B' 'A' 'C' 'A' 'B' 'C' 'D' 'E' -
Instrucción de consulta
SELECT approx_most_frequent(3, content) -
Salida
La consulta devuelve
{"A":3, "B":2, "C":2}.