Todos os produtos
Search
Central de documentação

Simple Log Service:Funções aproximadas

Última atualização: Jul 03, 2026

As funções aproximadas estimam contagens distintas, percentis e histogramas com baixo custo computacional.

O SLS oferece suporte às seguintes funções aproximadas.

Importante

Para usar strings em instruções analíticas, coloque-as entre aspas simples (''). Strings sem aspas ou entre aspas duplas ("") indicam nomes de campos ou colunas. Por exemplo,

'status'

indica a string status, enquanto

status

ou

"status"

indica o campo de log status.

Função

Sintaxe

Descrição

Suporte SQL

Suporte SPL

approx_distinct

approx_distinct(x)

Estima a contagem de valores distintos em x. Erro padrão: 2,3%.

approx_distinct(x, e)

Estima a contagem de valores distintos em x com erro padrão personalizado.

approx_percentile

approx_percentile(x, percentage)

Retorna o percentil percentage aproximado de x (em ordem crescente).

approx_percentile(x, array[percentage01, percentage02...])

Retorna os valores aproximados de x nos percentis percentage01 e percentage02 (em ordem crescente).

approx_percentile(x, weight, percentage)

Retorna o percentil percentage aproximado de x ponderado por x × weight (em ordem crescente).

approx_percentile(x, weight, array[percentage01, percentage02...])

Retorna os valores aproximados de x nos percentis percentage01 e percentage02, ponderados por x × weight.

approx_percentile(x, weight, percentage, accuracy)

Retorna o percentil percentage aproximado de x ponderado por x × weight, com precisão configurável.

numeric_histogram

numeric_histogram(bucket, x)

Calcula um histograma aproximado para x com a quantidade especificada de buckets. Retorna um objeto JSON.

numeric_histogram(bucket, x, weight)

Calcula um histograma aproximado ponderado para x com a quantidade especificada de buckets. Retorna um objeto JSON.

numeric_histogram_u

numeric_histogram_u(bucket, x)

Calcula um histograma aproximado para x com a quantidade especificada de buckets. Retorna uma tabela com várias linhas e colunas.

approx_most_frequent

approx_most_frequent(k, x)

Estima os k valores mais frequentes na coluna x e suas contagens aproximadas. Retorna um mapa.

Função Approx_distinct

A função approx_distinct estima a contagem de valores distintos em x.

Sintaxe

  • Estima a contagem de valores distintos em x. Erro padrão: 2,3%.

    approx_distinct(x)
  • Estima a contagem de valores distintos em x com erro padrão personalizado.

    approx_distinct(x, e)

Parâmetros

Parâmetro

Descrição

x

Nome da coluna. Aceita qualquer tipo de dado.

e

Erro padrão personalizado. Intervalo válido: [0,0115, 0,26].

Tipo de valor de retorno

BIGINT

Exemplos

  • Exemplo 1: Calcular PV com count e estimar UV com approx_distinct no campo client_ip. Erro padrão: 2,3%.

    • Instrução de consulta

      * | SELECT count(*) AS PV, approx_distinct(client_ip) AS UV
    • A consulta retorna PV de 941.787 e UV de 723.040.

  • Exemplo 2: Calcular PV e estimar UV no campo client_ip com erro padrão personalizado de 10%.

    • Instrução de consulta

      * | SELECT count(*) AS PV, approx_distinct(client_ip,0.1) AS UV
    • A consulta retorna PV de 9.095 e UV de 7.946.

Função Approx_percentile

A função approx_percentile retorna o percentil aproximado de x para uma determinada percentage. Os resultados são aproximados e não há garantias de estabilidade.

Sintaxe

  • Retorna o percentil percentage aproximado de x (em ordem crescente). Tipo de retorno: double.

    approx_percentile(x, percentage)
  • Retorna os valores aproximados de x nos percentis percentage01 e percentage02 (em ordem crescente). Tipo de retorno: array(double,double).

    approx_percentile(x, array[percentage01, percentage02...])
  • Retorna o percentil percentage aproximado de x ponderado por x × weight. Tipo de retorno: double.

    approx_percentile(x, weight, percentage)
  • Retorna os valores aproximados de x nos percentis percentage01 e percentage02, ponderados por x × weight. Tipo de retorno: array(double,double).

    approx_percentile(x, weight, array[percentage01, percentage02...])
  • Retorna o percentil percentage aproximado de x ponderado por x × weight, com precisão configurável. Tipo de retorno: double.

    approx_percentile(x, weight, percentage, accuracy)

Parâmetros

Parâmetro

Descrição

x

Nome da coluna. Deve ser do tipo DOUBLE.

percentage

Valor do percentil. Intervalo válido: [0, 1].

accuracy

Valor de precisão. Intervalo válido: (0, 1).

weight

Peso. Deve ser um número inteiro maior que 1.

Os valores são ordenados por x × weight.

Tipo de valor de retorno

DOUBLE ou ARRAY(DOUBLE)

Exemplos

  • Exemplo 1: Retornar o 50º percentil aproximado (mediana) de request_time.

    • Instrução de consulta

      * | SELECT approx_percentile(request_time, 0.5)
    • A consulta retorna 45.0, que corresponde à mediana aproximada (50º percentil) de request_time.

  • Exemplo 2: Retornar os percentis aproximados 10, 20 e 70 de request_time.

    • Instrução de consulta

      * | SELECT approx_percentile(request_time, array[0.1, 0.2, 0.7])
    • A consulta retorna [17.0, 24.0, 59.0], que são os valores aproximados de request_time nos percentis 10, 20 e 70, respectivamente.

  • Exemplo 3: 50º percentil ponderado de request_time. Peso: 100 se request_time < 20, caso contrário 10.

    • Instrução de consulta

      * |
      SELECT
        approx_percentile(
          request_time,
          CASE
            WHEN request_time < 20 THEN 100
            ELSE 10
          END,
          0.5
        )
    • A consulta retorna 18.0.

  • Exemplo 4: Percentis 80 e 90 ponderados de request_time. Peso: 100 se request_time < 20, caso contrário 10.

    • Instrução de consulta

      * |
      SELECT
        approx_percentile(
          request_time,
          CASE
            WHEN request_time < 20 THEN 100
            ELSE 10
          END,
          array [0.8, 0.9]
        )
    • A consulta retorna [48.0, 64.0].

  • Exemplo 5: 50º percentil ponderado de request_time, com precisão de 0,2. Peso: 100 se request_time < 20, caso contrário 10.

    • Instrução de consulta

      * |
      SELECT
        approx_percentile(
          request_time,
          CASE
            WHEN request_time < 20 THEN 100
            ELSE 10
          END,
          0.5,
          0.2
        )

Função Numeric_histogram

A função numeric_histogram calcula um histograma aproximado de x com uma determinada quantidade de buckets. Retorna um objeto JSON.

Sintaxe

  • Calcula um histograma aproximado para x com a quantidade especificada de buckets.

    numeric_histogram(bucket, x)
  • Calcula um histograma aproximado ponderado para x com a quantidade especificada de buckets.

    numeric_histogram(bucket, x, weight)

Parâmetros

Parâmetro

Descrição

bucket

Número de buckets do histograma. Deve ser BIGINT.

x

Nome da coluna. Deve ser do tipo DOUBLE.

weight

Peso. Deve ser um número inteiro maior que 0.

Os valores são agrupados por x × weight.

Tipo de valor de retorno

JSON

Exemplos

  • Exemplo 1: Calcular um histograma aproximado das durações de requisição para requisições POST.

    • Instrução de consulta

      request_method:POST | SELECT numeric_histogram(10, request_time)
    • Retorna um objeto JSON mapeando limites superiores de buckets para contagens, por exemplo, "45.03638445951907":11351.0, "31.617058096415327":16180.0 e "51.0979254315973":13786.0.

  • Exemplo 2: Calcular um histograma aproximado ponderado das durações de requisição para requisições POST.

    • Instrução de consulta

      request_method:POST | SELECT numeric_histogram(10, request_time, CASE WHEN request_time<20 THEN 100 ELSE 10 END)
    • Retorna uma coluna JSON _col0 com 10 pares chave-valor mapeando intervalos para frequências, por exemplo, "60.63632633267428":268070.0, "76.41340599455032":275250.0 e "15.028066666666671":1500000.0.

Função Numeric_histogram_u

A função numeric_histogram_u calcula um histograma aproximado de x com uma determinada quantidade de buckets. Retorna uma tabela com várias linhas e colunas.

Sintaxe

numeric_histogram_u(bucket, x)

Parâmetros

Parâmetro

Descrição

bucket

Número de buckets do histograma. Deve ser BIGINT.

x

Nome da coluna. Deve ser do tipo DOUBLE.

Tipo de valor de retorno

Uma tabela com as colunas bucket_avg e count.

Exemplos

Calcular um histograma aproximado das durações de requisição POST.

  • Instrução de consulta

    request_method:POST | SELECT numeric_histogram_u(10, request_time)
  • Retorna 10 linhas com as colunas bucket_avg e count. Por exemplo: bucket_avg 14,20, count 18806,0; bucket_avg 70,78, count 13442,0.

Função Approx_most_frequent

Estima os k valores mais frequentes na coluna x e suas contagens aproximadas.

Sintaxe

approx_most_frequent(k, x)

Parâmetros

Parâmetro

Descrição

k

Quantidade de valores mais frequentes a retornar. Por exemplo, 5 retorna os 5 principais valores e suas contagens aproximadas.

x

Nome da coluna. Deve ser do tipo VARCHAR.

Valor de retorno

map(VARCHAR, BIGINT)

Exemplo

Obter os três valores mais frequentes do campo content.

  • Dados de amostra

    content: 
    'A'
    'B'
    'A'
    'C'
    'A'
    'B'
    'C'
    'D'
    'E'
  • Instrução de consulta

    SELECT approx_most_frequent(3, content)
  • Saída

    A consulta retorna {"A":3, "B":2, "C":2}.