As funções aproximadas estimam contagens distintas, percentis e histogramas com baixo custo computacional.
O SLS oferece suporte às seguintes funções aproximadas.
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(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(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(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(bucket, x) |
Calcula um histograma aproximado para x com a quantidade especificada de buckets. Retorna uma tabela com várias linhas e colunas. |
✔ |
❌ |
|
|
|
Estima os |
✔ |
❌ |
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
counte estimar UV comapprox_distinctno campoclient_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_ipcom 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) derequest_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 derequest_timenos 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.0e"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
_col0com 10 pares chave-valor mapeando intervalos para frequências, por exemplo,"60.63632633267428":268070.0,"76.41340599455032":275250.0e"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_avgecount. 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}.