Uma função de agregação calcula um único valor a partir de um conjunto de valores. Este tópico descreve a sintaxe básica das funções de agregação e fornece exemplos de uso.
Simple Log Service oferece suporte às seguintes funções de agregação.
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.
Parâmetro | Sintaxe | Descrição | Suporte SQL | Suporte SPL |
arbitrary(x) | Retorna um valor arbitrário não NULL de x. | √ | × | |
avg(x) | Calcula a média aritmética de x. | √ | × | |
bitwise_and_agg(x) | Retorna o AND bit a bit de todos os valores em x. | √ | × | |
bitwise_or_agg(x) | Retorna o OR bit a bit de todos os valores em x. | √ | × | |
bool_and(expressão booleana) | Retorna true se todos os logs atenderem à condição. A função | √ | × | |
bool_or(expressão booleana) | Retorna true se pelo menos um log atender à condição. | √ | × | |
checksum(x) | Calcula o checksum de x. | √ | × | |
count(*) | Retorna o número total de logs. | √ | × | |
count(1) | Retorna o número total de logs, equivalente a | √ | × | |
count(x) | Retorna o número de logs em que o valor de x não é NULL. | √ | × | |
count_if(expressão booleana) | Retorna o número de logs que atendem à condição especificada. | √ | × | |
every(expressão booleana) | Retorna true se todos os logs atenderem à condição. A função | √ | × | |
geometric_mean(x) | Calcula a média geométrica de x. | √ | × | |
kurtosis(x) | Calcula a curtose de x. | √ | × | |
map_union(x) | Retorna a união de mapas em uma coluna. Se uma chave existir em vários mapas, um valor arbitrário para essa chave será escolhido. | √ | × | |
max(x) | Retorna o valor máximo em x. | √ | × | |
max(x, n) | Retorna os n maiores valores em x como um array. | √ | × | |
max_by(x, y) | Retorna o valor de x associado ao valor máximo de y. | √ | × | |
max_by(x, y, n) | Retorna um array com os valores de x correspondentes aos n maiores valores de y. | √ | × | |
min(x) | Retorna o valor mínimo em x. | √ | × | |
min(x, n) | Retorna os n menores valores em x como um array. | √ | × | |
min_by(x, y) | Retorna o valor de x associado ao valor mínimo de y. | √ | × | |
min_by(x, y, n) | Retorna um array com os valores de x correspondentes aos n menores valores de y. | √ | × | |
skewness(x) | Calcula a assimetria de x. | √ | × | |
sum(x) | Calcula a soma de x. | √ | × |
Função arbitrary
A função arbitrary retorna um valor arbitrário não nulo da expressão x.
Sintaxe
arbitrary(x)
Parâmetros
|
Parâmetro |
Descrição |
|
x |
Uma expressão de qualquer tipo de dados. |
Tipo de retorno
Corresponde ao tipo de dados da expressão de entrada.
Exemplo
Retorne um valor arbitrário não nulo do campo request_method.
-
Instrução de consulta (Debug)
* | SELECT arbitrary(request_method) AS request_method A coluna request_method retorna um valor como
GET.
Função avg
A função avg retorna a média dos valores em x.
Sintaxe
avg(x)
Parâmetros
|
Parâmetro |
Descrição |
|
x |
A coluna ou expressão para calcular a média. Os valores devem ser do tipo double, bigint, decimal ou real. |
Tipo de valor de retorno
Um valor do tipo double.
Exemplos
Retorne projetos com latência média superior a 1.000 microssegundos.
-
Instrução de consulta (Debug)
method: PostLogstoreLogs | SELECT avg(latency) AS avg_latency, Project GROUP BY Project HAVING avg_latency > 1000 A consulta retorna um registro com avg_latency de
3223.4162679425835e um nome de Project que começa comdatalab-14.
Função bitwise_and_agg
A função bitwise_and_agg retorna o AND bit a bit de todos os valores em x.
Sintaxe
bitwise_and_agg(x)
Parâmetros
|
Parâmetro |
Descrição |
|
x |
Um valor bigint. |
Tipo de valor de retorno
Um valor bigint.
Exemplos
Execute uma operação AND bit a bit em todos os valores do campo status.
-
Instrução de consulta (Debug)
* | SELECT bitwise_and_agg(status) A consulta retorna uma única coluna chamada
_col0com valor0.
Função bitwise_or_agg
A função bitwise_or_agg retorna o resultado da operação OR bit a bit em todos os valores em x.
Sintaxe
bitwise_or_agg(x)
Parâmetros
|
Parâmetro |
Descrição |
|
x |
Um valor bigint. |
Tipo de retorno
Um valor bigint.
Exemplo
Execute uma operação OR bit a bit em todos os valores do campo request_time.
-
Instrução de consulta e análise (Debug)
* | SELECT bitwise_or_agg(request_length) Os resultados da consulta e análise são retornados como uma única coluna
_col0, e o valor é16383.
Função bool_and
A função bool_and retorna true se uma expressão booleana for true para todos os logs. Essa função equivale à função every.
Sintaxe
bool_and(boolean expression)
Parâmetros
|
Parâmetro |
Descrição |
|
boolean expression |
A expressão booleana a ser avaliada. |
Tipo de valor de retorno
boolean
Exemplo
Este exemplo verifica se o valor de request_time para todos os logs é menor que 100.
-
Instrução de consulta e análise (Debug)
* | SELECT bool_and(request_time < 100) O resultado da consulta e análise é
true, o que indica que o valor derequest_timede todos os logs é menor que 100.
Função bool_or
A função bool_or retorna true se uma expressão booleana for true para pelo menos um log.
Sintaxe
bool_or(boolean expression)
Parâmetros
|
Parâmetro |
Descrição |
|
boolean expression |
Uma expressão booleana. |
Tipo de valor de retorno
boolean
Exemplos
Para verificar se o request_time de algum log é menor que 20:
-
Instrução de consulta e análise (Debug)
* | SELECT bool_or(request_time < 20) Os resultados da consulta e análise retornam
truepara a coluna_col0, o que indica que o log contém um registro onde request_time é menor que 20.
Função checksum
A função checksum calcula o checksum de x.
Sintaxe
checksum(x)
Parâmetros
|
Parâmetro |
Descrição |
|
x |
Uma expressão de qualquer tipo de dados. |
Tipo de valor de retorno
Uma string codificada em Base64.
Exemplo
-
Instrução de consulta (Debug)
* | SELECT checksum(request_method) AS request_method O checksum do campo request_method é
NDXFdgnd8GE=.
Função count
A função count conta logs.
Sintaxe
-
Conta o número total de logs.
count(*) -
Retorna o número total de logs. Equivalente a
count(*).count(1) -
Conta logs onde x não é NULL.
count(x)
Parâmetros
|
Parâmetro |
Descrição |
|
x |
Uma expressão de qualquer tipo de dados. |
Tipo de valor de retorno
Um inteiro.
Exemplos
-
Exemplo 1: Contar visualizações de página do site.
-
Instrução de consulta (Debug)
* | SELECT count(*) AS PV Resultados da consulta e análise: A tabela de resultados contém uma coluna PV com o valor
2009.
-
-
Exemplo 2: Contar logs onde o campo
request_methodnão é nulo.-
Instrução de consulta (Debug)
* | SELECT count(request_method) AS count Resultados da consulta e análise: A tabela de resultados contém uma coluna count com o valor
1954.
-
Função count_if
A função count_if conta logs que atendem a uma condição especificada.
Sintaxe
count_if(boolean expression)
Parâmetros
|
Parâmetro |
Descrição |
|
boolean expression |
A condição a ser avaliada. |
Tipo de retorno
A contagem de logs que atendem à condição.
Exemplo
Conte o número de entradas de log onde o valor do campo request_uri termina com file-0.
-
Instrução de consulta e análise (debug)
* | SELECT count_if(request_uri like '%file-0') AS count Resultados da consulta e análise
Função geometric_mean
A função geometric_mean calcula a média geométrica de x.
Sintaxe
geometric_mean(x)
Parâmetros
|
Parâmetro |
Descrição |
|
x |
Um valor do tipo double, bigint ou real. |
Tipo de valor de retorno
Retorna um valor double.
Exemplo
Calcule a média geométrica do tempo de requisição.
-
Instrução de consulta e análise (Debug)
* | SELECT geometric_mean(request_time) AS time Os resultados da consulta e análise mostram uma coluna time com valor de
39.443123208882308.
Função every
A função every retorna true se uma expressão booleana for verdadeira para todos os logs. Essa função equivale à função bool_and.
Sintaxe
every(boolean expression)
Parâmetros
|
Parâmetro |
Descrição |
|
boolean expression |
Uma expressão que retorna um valor booleano para cada log. |
Tipo de valor de retorno
Retorna um valor booleano.
Exemplo
Este exemplo verifica se o valor de request_time em cada log é menor que 100.
-
Instrução de consulta e análise (Debug)
* | SELECT every(request_time < 100) Resultados da consulta e análise
Função kurtosis
Calcula a curtose de x.
Sintaxe
kurtosis(x)
Parâmetros
|
Parâmetro |
Descrição |
|
x |
O valor deve ser double ou bigint. |
Tipo de retorno
double
Exemplo
Calcule a curtose do campo request_time.
-
Instrução de consulta (Debug)
*| SELECT kurtosis(request_time) -
Resultados da consulta e análise
kurtosis -3.0006998250171186
Função map_union
A função map_union retorna a união de todos os mapas em uma coluna. Se a mesma chave existir em vários mapas de entrada, o valor para essa chave no mapa resultante é escolhido de forma não determinística a partir de uma das entradas.
Sintaxe
map_union(x)
Parâmetros
|
Parâmetro |
Descrição |
|
x |
Uma coluna do tipo map. |
Tipo de valor de retorno
Retorna um único valor do tipo map.
Exemplo
Este exemplo agrega valores de mapa do campo etl_context em um único mapa.
-
Campo de amostra
etl_context: { project:"datalab-148****6461-cn-chengdu" logstore:"internal-etl-log" consumer_group:"etl-83****4d1965" consumer:"etl-b2d40ed****c8d6-291294" shard_id:"0" } -
Instrução de consulta
* | SELECT map_union( try_cast(json_parse(etl_context) AS map(varchar, varchar)) ) Resultados da consulta e análise: Após a execução da instrução de consulta, a coluna de resultado é nomeada
_col0, e o valor é um mapa de pares chave-valor analisados de etl_context, contendo campos comoconsumer_group,shard_id,project,logstoreeconsumer, além de seus valores correspondentes.
Função max
A função max retorna o valor máximo de x.
Sintaxe
-
Retorna o valor máximo de x.
max(x) -
Retorna um array com os n maiores valores de x.
max(x, n)
Parâmetros
|
Parâmetro |
Descrição |
|
x |
Qualquer expressão. |
|
n |
Um inteiro positivo. |
Tipo de valor de retorno
O mesmo tipo de dados da expressão de entrada.
Exemplos
-
Exemplo 1: Encontrar o tempo máximo de requisição.
-
Instrução de consulta (Debug)
* | SELECT max(request_time) AS max_request_time Resultados da consulta e análise: O valor de
max_request_timeé80.0.
-
-
Exemplo 2: Encontrar os 10 maiores tempos de requisição.
-
Instrução de consulta (Debug)
* | SELECT max(request_time, 10) AS "top 10" Resultados da consulta e análise: A consulta retorna
[80.0,80.0,80.0,80.0,80.0,79.0,79.0,79.0,78.0,78.0]para a coluna top 10. O array contém os 10 maiores valores derequest_timeem ordem decrescente.
-
Função max_by
A função max_by oferece suporte às duas sintaxes a seguir.
Sintaxe
-
Retorna o valor de x para o valor máximo de y.
max_by(x, y) -
Retorna um array de valores x para os n maiores valores de y.
max_by(x, y, n)
Parâmetros
|
Parâmetro |
Descrição |
|
x |
Uma expressão de qualquer tipo de dados. |
|
y |
Uma expressão de qualquer tipo de dados. |
|
n |
Um inteiro positivo. |
Tipo de valor de retorno
Igual ao tipo de dados de x.
Exemplos
-
Exemplo 1: Encontrar o horário do pedido com o maior valor antes de impostos.
-
Instrução de consulta e análise
* | SELECT max_by(UsageEndTime, PretaxAmount) AS time Resultados da consulta e análise: A coluna time retorna
1625731025.
-
-
Exemplo 2: Encontrar os métodos de requisição para as três requisições com os maiores tempos de requisição.
-
Instrução de consulta e análise (debug)
* | SELECT max_by(request_method, request_time, 3) AS method Resultados da consulta e análise: O valor de method é
["POST","POST","POST"], o que indica que os métodos das três requisições mais recentes ordenadas porrequest_timesão todos POST.
-
Função min
A função min retorna o valor mínimo em x.
Sintaxe
-
Retorna o valor mínimo em x.
min(x) -
Retorna os n menores valores em x como um array.
min(x,n)
Parâmetros
|
Parâmetro |
Descrição |
|
x |
Uma expressão de qualquer tipo de dados. |
|
n |
Um inteiro positivo. |
Tipo de valor de retorno
Igual ao tipo de dados da expressão de entrada.
Exemplos
-
Exemplo 1: Encontrar o tempo mínimo de requisição.
-
Instrução de consulta e análise (Debug)
* | SELECT min(request_time) AS min_request_time Os resultados da consulta e análise retornam uma coluna chamada min_request_time com o valor
10.0.
-
-
Exemplo 2: Encontrar os 10 menores tempos de requisição.
-
Instrução de consulta e análise (Debug)
* | SELECT min(request_time, 10) Os resultados da consulta e análise retornam uma coluna chamada
_col0com o valor[10.0,10.0,10.0,10.0,10.0,11.0,12.0,12.0,13.0,13.0].
-
Função min_by
A função min_by possui as duas sintaxes a seguir.
Sintaxe
-
Retorna o valor de x para o valor mínimo de y.
min_by(x, y) -
Retorna um array de valores x para os n menores valores de y.
min_by(x, y, n)
Parâmetros
|
Parâmetro |
Descrição |
|
x |
Uma expressão de qualquer tipo de dados. |
|
y |
Uma expressão de qualquer tipo de dados. |
|
n |
Um inteiro positivo. |
Tipo de valor de retorno
O mesmo tipo de dados do parâmetro x.
Exemplos
-
Exemplo 1: Encontrar o método de requisição para a requisição com o menor tempo de requisição.
-
Instrução de consulta e análise (Debug)
* | SELECT min_by(request_method, request_time) AS method Resultados da consulta e análise: A coluna method retorna
GET.
-
-
Exemplo 2: Encontrar os métodos de requisição para as três requisições com os menores tempos de requisição.
-
Instrução de consulta e análise (Debug)
* | SELECT min_by(request_method, request_time, 3) AS method Resultados da consulta e análise.
-
Função skewness
A função skewness calcula a assimetria da expressão x.
Sintaxe
skewness(x)
Parâmetros
|
Parâmetro |
Descrição |
|
x |
Uma expressão que resulta em um tipo double ou bigint. |
Tipo de valor de retorno
double
Exemplo
Calcule a assimetria dos valores no campo request_time.
-
Instrução de consulta e análise (Debug)
*| SELECT skewness(request_time) AS skewness Resultados da consulta e análise: O valor de skewness é
0.00042944441602043965.
Função sum
A função sum soma os valores na expressão x.
Sintaxe
sum(x)
Parâmetros
|
Parâmetro |
Descrição |
|
x |
Uma expressão que resulta em um tipo double, bigint, decimal ou real. |
Tipo de valor de retorno
Igual ao tipo de dados da expressão de entrada.
Exemplos
Calcule o tráfego diário de um site.
-
Instrução de consulta e análise (debug)
* | SELECT date_trunc('day', __time__) AS time, sum(body_bytes_sent) AS body_bytes_sent GROUP BY time ORDER BY time Resultados da consulta e análise: Após a execução da instrução de consulta e análise, uma tabela de resultados estatísticos agregada por dia é retornada, contendo a soma de
body_bytes_sentpara um total de cinco dias, de 2023-09-19 a 2023-09-23.