Todos los productos
Search
Centro de documentos

Simple Log Service:Funciones aproximadas

Última actualización: Sep 02, 2026

Las funciones aproximadas estiman conteos distintos, percentiles e histogramas con un bajo costo computacional.

SLS admite las siguientes funciones aproximadas.

Importante

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

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

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

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

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.

✔

❌

approx_most_frequent

approx_most_frequent(k, x)

Estima los k valores más frecuentes en la columna x y sus conteos aproximados. Devuelve un mapa.

✔

❌

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 count y estimar UV con approx_distinct en el campo client_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_ip con 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) de request_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 de request_time en 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.0 y "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 _col0 con 10 pares clave-valor que asignan rangos a frecuencias; por ejemplo, "60.63632633267428":268070.0, "76.41340599455032":275250.0 y "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_avg y count. 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}.