Une fonction d'agrégation calcule une valeur unique à partir d'un ensemble de valeurs. Cette rubrique décrit la syntaxe de base des fonctions d'agrégation et fournit des exemples d'utilisation.
Simple Log Service prend en charge les fonctions d'agrégation suivantes.
Si vous souhaitez utiliser des chaînes de caractères dans les instructions d'analyse, vous devez les entourer de guillemets simples (''). Les chaînes non entourées de guillemets ou entourées de guillemets doubles ("") indiquent des noms de champ ou de colonne. Par exemple,
'status'
indique la chaîne de caractères « status », tandis que
status
ou
"status"
indique le champ de journal « status ».
Paramètre | Syntaxe | Description | Prise en charge SQL | Prise en charge SPL |
arbitrary(x) | Renvoie une valeur non NULL arbitraire issue de x. | √ | × | |
avg(x) | Calcule la moyenne arithmétique de x. | √ | × | |
bitwise_and_agg(x) | Renvoie le résultat de l'opération ET binaire (bitwise AND) appliquée à toutes les valeurs de x. | √ | × | |
bitwise_or_agg(x) | Renvoie le résultat de l'opération OU binaire (bitwise OR) appliquée à toutes les valeurs de x. | √ | × | |
bool_and(expression booléenne) | Renvoie true si tous les journaux satisfont à la condition. La fonction | √ | × | |
bool_or(expression booléenne) | Renvoie true si au moins un journal satisfait à la condition. | √ | × | |
checksum(x) | Calcule la somme de contrôle (checksum) de x. | √ | × | |
count(*) | Renvoie le nombre total de journaux. | √ | × | |
count(1) | Renvoie le nombre total de journaux, ce qui équivaut à | √ | × | |
count(x) | Renvoie le nombre de journaux pour lesquels la valeur de x n'est pas NULL. | √ | × | |
count_if(expression booléenne) | Renvoie le nombre de journaux qui satisfont à la condition spécifiée. | √ | × | |
every(expression booléenne) | Renvoie true si tous les journaux satisfont à la condition. La fonction | √ | × | |
geometric_mean(x) | Calcule la moyenne géométrique de x. | √ | × | |
kurtosis(x) | Calcule le coefficient d'aplatissement (kurtosis) de x. | √ | × | |
map_union(x) | Renvoie l'union des maps présentes dans une colonne. Si une clé existe dans plusieurs maps, une valeur arbitraire correspondant à cette clé est sélectionnée. | √ | × | |
max(x) | Renvoie la valeur maximale contenue dans x. | √ | × | |
max(x, n) | Renvoie sous forme de tableau les n plus grandes valeurs contenues dans x. | √ | × | |
max_by(x, y) | Renvoie la valeur de x associée à la valeur maximale de y. | √ | × | |
max_by(x, y, n) | Renvoie un tableau contenant les valeurs de x correspondant aux n plus grandes valeurs de y. | √ | × | |
min(x) | Renvoie la valeur minimale contenue dans x. | √ | × | |
min(x, n) | Renvoie sous forme de tableau les n plus petites valeurs contenues dans x. | √ | × | |
min_by(x, y) | Renvoie la valeur de x associée à la valeur minimale de y. | √ | × | |
min_by(x, y, n) | Renvoie un tableau contenant les valeurs de x correspondant aux n plus petites valeurs de y. | √ | × | |
skewness(x) | Calcule le coefficient d'asymétrie (skewness) de x. | √ | × | |
sum(x) | Calcule la somme des valeurs de x. | √ | × |
Fonction arbitrary
La fonction arbitrary renvoie une valeur non NULL arbitraire extraite de l'expression x.
Syntaxe
arbitrary(x)
Paramètres
|
Paramètre |
Description |
|
x |
Expression de n'importe quel type de données. |
Type de retour
Correspond au type de données de l'expression d'entrée.
Exemple
Renvoie une valeur non NULL arbitraire issue du champ request_method.
-
Instruction de requête (Déboguer)
* | SELECT arbitrary(request_method) AS request_method La colonne request_method renvoie une valeur telle que
GET.
Fonction avg
La fonction avg renvoie la moyenne des valeurs contenues dans x.
Syntaxe
avg(x)
Paramètres
|
Paramètre |
Description |
|
x |
Colonne ou expression dont il faut calculer la moyenne. Les valeurs doivent être de type double, bigint, decimal ou real. |
Type de valeur de retour
Valeur de type double.
Exemples
Renvoie les projets dont la latence moyenne est supérieure à 1 000 microsecondes.
-
Instruction de requête (Déboguer)
method: PostLogstoreLogs | SELECT avg(latency) AS avg_latency, Project GROUP BY Project HAVING avg_latency > 1000 La requête renvoie un enregistrement avec une valeur avg_latency de
3223.4162679425835et un nom de Project commençant pardatalab-14.
Fonction bitwise_and_agg
La fonction bitwise_and_agg renvoie le résultat de l'opération ET binaire (bitwise AND) appliquée à toutes les valeurs de x.
Syntaxe
bitwise_and_agg(x)
Paramètres
|
Paramètre |
Description |
|
x |
Valeur de type bigint. |
Type de valeur de retour
Valeur de type bigint.
Exemples
Effectue une opération ET binaire sur toutes les valeurs du champ status.
-
Instruction de requête (Déboguer)
* | SELECT bitwise_and_agg(status) La requête renvoie une seule colonne nommée
_col0avec la valeur0.
Fonction bitwise_or_agg
La fonction bitwise_or_agg renvoie le résultat de l'opération OU binaire (bitwise OR) appliquée à toutes les valeurs de x.
Syntaxe
bitwise_or_agg(x)
Paramètres
|
Paramètre |
Description |
|
x |
Valeur de type bigint. |
Type de retour
Valeur de type bigint.
Exemple
Effectuez une opération OU binaire sur toutes les valeurs du champ request_time.
-
Instruction de requête et d'analyse (Déboguer)
* | SELECT bitwise_or_agg(request_length) Les résultats de la requête et de l'analyse sont renvoyés dans une seule colonne
_col0, avec la valeur16383.
Fonction bool_and
La fonction bool_and renvoie true si une expression booléenne est évaluée à true pour tous les journaux. Cette fonction est équivalente à la fonction every.
Syntaxe
bool_and(boolean expression)
Paramètres
|
Paramètre |
Description |
|
expression booléenne |
Expression booléenne à évaluer. |
Type de valeur de retour
booléen
Exemple
Cet exemple vérifie si la valeur request_time de tous les journaux est inférieure à 100.
-
Instruction de requête et d'analyse (Déboguer)
* | SELECT bool_and(request_time < 100) Le résultat de la requête et de l'analyse est
true, ce qui indique que la valeurrequest_timede tous les journaux est inférieure à 100.
Fonction bool_or
La fonction bool_or renvoie true si une expression booléenne est évaluée à true pour au moins un journal.
Syntaxe
bool_or(boolean expression)
Paramètres
|
Paramètre |
Description |
|
expression booléenne |
Expression booléenne. |
Type de valeur de retour
booléen
Exemples
Pour vérifier si la valeur request_time d'un journal quelconque est inférieure à 20 :
-
Instruction de requête et d'analyse (Déboguer)
* | SELECT bool_or(request_time < 20) Les résultats de la requête et de l'analyse renvoient la valeur
truepour la colonne_col0, ce qui indique que le journal contient un enregistrement dont la valeur request_time est inférieure à 20.
Fonction checksum
La fonction checksum calcule la somme de contrôle (checksum) de x.
Syntaxe
checksum(x)
Paramètres
|
Paramètre |
Description |
|
x |
Expression de n'importe quel type de données. |
Type de valeur de retour
Chaîne encodée en Base64.
Exemple
-
Instruction de requête (Déboguer)
* | SELECT checksum(request_method) AS request_method La somme de contrôle du champ request_method est
NDXFdgnd8GE=.
Fonction count
La fonction count permet de compter les journaux.
Syntaxe
-
Compte le nombre total de journaux.
count(*) -
Renvoie le nombre total de journaux. Cette syntaxe est équivalente à
count(*).count(1) -
Compte les journaux pour lesquels x n'est pas NULL.
count(x)
Paramètres
|
Paramètre |
Description |
|
x |
Une expression de n'importe quel type de données. |
Type de valeur renvoyée
Un entier.
Exemples
-
Exemple 1 : comptez les pages vues d'un site web.
-
Instruction de requête (Déboguer)
* | SELECT count(*) AS PV Résultats de la requête et de l'analyse : le tableau des résultats contient une colonne PV avec la valeur
2009.
-
-
Exemple 2 : comptez les journaux dont le champ
request_methodn'est pas nul.-
Instruction de requête (Déboguer)
* | SELECT count(request_method) AS count Résultats de la requête et de l'analyse : le tableau des résultats contient une colonne count avec la valeur
1954.
-
Fonction count_if
La fonction count_if compte les journaux qui satisfont une condition spécifiée.
Syntaxe
count_if(boolean expression)
Paramètres
|
Paramètre |
Description |
|
boolean expression |
Condition à évaluer. |
Type de retour
Nombre de journaux satisfaisant la condition.
Exemple
Comptez le nombre d'entrées de journal dont la valeur du champ request_uri se termine par file-0.
-
Instruction de requête et d'analyse (déboguer)
* | SELECT count_if(request_uri like '%file-0') AS count Résultats de la requête et de l'analyse
Fonction geometric_mean
La fonction geometric_mean calcule la moyenne géométrique de x.
Syntaxe
geometric_mean(x)
Paramètres
|
Paramètre |
Description |
|
x |
Valeur de type double, bigint ou real. |
Type de valeur renvoyée
Renvoie une valeur double.
Exemple
Calculez la moyenne géométrique du temps de requête.
-
Instruction de requête et d'analyse (Déboguer)
* | SELECT geometric_mean(request_time) AS time Les résultats de la requête et de l'analyse affichent une colonne time avec la valeur
39.443123208882308.
Fonction every
La fonction every renvoie true si une expression booléenne est évaluée comme vraie pour tous les journaux. Cette fonction est équivalente à la fonction bool_and.
Syntaxe
every(boolean expression)
Paramètres
|
Paramètre |
Description |
|
boolean expression |
Expression qui renvoie une valeur booléenne pour chaque journal. |
Type de valeur renvoyée
Renvoie une valeur booléenne.
Exemple
Cet exemple vérifie si la valeur request_time de chaque journal est inférieure à 100.
-
Instruction de requête et d'analyse (Déboguer)
* | SELECT every(request_time < 100) Résultats de la requête et de l'analyse
Fonction kurtosis
Calcule l'aplatissement (kurtosis) de x.
Syntaxe
kurtosis(x)
Paramètres
|
Paramètre |
Description |
|
x |
La valeur doit être de type double ou bigint. |
Type de retour
double
Exemple
Calcule l'aplatissement du champ request_time.
-
Instruction de requête (Déboguer)
*| SELECT kurtosis(request_time) -
Résultats de la requête et de l'analyse
kurtosis -3.0006998250171186
Fonction map_union
La fonction map_union renvoie l'union de toutes les cartes (maps) d'une colonne. Si la même clé existe dans plusieurs cartes d'entrée, la valeur associée à cette clé dans la carte résultante est choisie de manière non déterministe parmi l'une des entrées.
Syntaxe
map_union(x)
Paramètres
|
Paramètre |
Description |
|
x |
Colonne de type map. |
Type de valeur renvoyée
Renvoie une seule valeur de type map.
Exemple
Cet exemple agrège les valeurs de carte du champ etl_context en une seule carte.
-
Exemple de champ
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" } -
Instruction de requête
* | SELECT map_union( try_cast(json_parse(etl_context) AS map(varchar, varchar)) ) Résultats de la requête et de l'analyse : après exécution de l'instruction de requête, la colonne de résultat est nommée
_col0et sa valeur est une carte de paires clé-valeur analysées à partir de etl_context, contenant des champs tels queconsumer_group,shard_id,project,logstoreetconsumer, ainsi que leurs valeurs correspondantes.
Fonction max
La fonction max renvoie la valeur maximale de x.
Syntaxe
-
Renvoie la valeur maximale de x.
max(x) -
Renvoie un tableau des n plus grandes valeurs de x.
max(x, n)
Paramètres
|
Paramètre |
Description |
|
x |
N'importe quelle expression. |
|
n |
Entier positif. |
Type de valeur renvoyée
Même type de données que l'expression d'entrée.
Exemples
-
Exemple 1 : trouvez le temps de requête maximal.
-
Instruction de requête (Déboguer)
* | SELECT max(request_time) AS max_request_time Résultats de la requête et de l'analyse : la valeur de
max_request_timeest80.0.
-
-
Exemple 2 : trouvez les 10 temps de requête les plus élevés.
-
Instruction de requête (Déboguer)
* | SELECT max(request_time, 10) AS "top 10" Résultats de la requête et de l'analyse : la requête renvoie
[80.0,80.0,80.0,80.0,80.0,79.0,79.0,79.0,78.0,78.0]pour la colonne top 10. Le tableau contient les 10 plus grandes valeurs derequest_timeclassées par ordre décroissant.
-
Fonction max_by
La fonction max_by prend en charge les deux syntaxes suivantes.
Syntaxe
-
Renvoie la valeur de x correspondant à la valeur maximale de y.
max_by(x, y) -
Renvoie un tableau de valeurs x correspondant aux n plus grandes valeurs de y.
max_by(x, y, n)
Paramètres
|
Paramètre |
Description |
|
x |
Expression de n'importe quel type de données. |
|
y |
Expression de n'importe quel type de données. |
|
n |
Entier positif. |
Type de valeur renvoyée
Identique au type de données de x.
Exemples
-
Exemple 1 : trouvez l'heure de la commande présentant le montant hors taxe le plus élevé.
-
Instruction de requête et d'analyse
* | SELECT max_by(UsageEndTime, PretaxAmount) AS time Résultats de la requête et de l'analyse : la colonne time renvoie
1625731025.
-
-
Exemple 2 : trouvez les méthodes de requête pour les trois requêtes ayant les temps de requête les plus longs.
-
Instruction de requête et d'analyse (déboguer)
* | SELECT max_by(request_method, request_time, 3) AS method Résultats de la requête et de l'analyse : la valeur de method est
["POST","POST","POST"], ce qui indique que les méthodes des trois requêtes les plus récentes triées parrequest_timesont toutes POST.
-
Fonction min
La fonction min renvoie la valeur minimale dans x.
Syntaxe
-
Renvoie la valeur minimale dans x.
min(x) -
Renvoie les n plus petites valeurs de x sous forme de tableau.
min(x,n)
Paramètres
|
Paramètre |
Description |
|
x |
Expression de n'importe quel type de données. |
|
n |
Entier positif. |
Type de valeur renvoyée
Identique au type de données de l'expression d'entrée.
Exemples
-
Exemple 1 : trouvez le temps de requête minimal.
-
Instruction de requête et d'analyse (Déboguer)
* | SELECT min(request_time) AS min_request_time Les résultats de la requête et de l'analyse renvoient une colonne nommée min_request_time avec la valeur
10.0.
-
-
Exemple 2 : trouvez les 10 temps de requête les plus petits.
-
Instruction de requête et d'analyse (Déboguer)
* | SELECT min(request_time, 10) Les résultats de la requête et de l'analyse renvoient une colonne nommée
_col0avec la valeur[10.0,10.0,10.0,10.0,10.0,11.0,12.0,12.0,13.0,13.0].
-
Fonction min_by
La fonction min_by dispose des deux syntaxes suivantes.
Syntaxe
-
Renvoie la valeur de x correspondant à la valeur minimale de y.
min_by(x, y) -
Renvoie un tableau de valeurs x correspondant aux n plus petites valeurs de y.
min_by(x, y, n)
Paramètres
|
Paramètre |
Description |
|
x |
Expression de n'importe quel type de données. |
|
y |
Expression de n'importe quel type de données. |
|
n |
Entier positif. |
Type de valeur renvoyée
Même type de données que le paramètre x.
Exemples
-
Exemple 1 : trouvez la méthode de requête pour la requête ayant le temps de requête minimal.
-
Instruction de requête et d'analyse (Déboguer)
* | SELECT min_by(request_method, request_time) AS method Résultats de la requête et de l'analyse : la colonne method renvoie
GET.
-
-
Exemple 2 : trouvez les méthodes de requête pour les trois requêtes ayant les temps de requête les plus courts.
-
Instruction de requête et d'analyse (Déboguer)
* | SELECT min_by(request_method, request_time, 3) AS method Résultats de la requête et de l'analyse.
-
Fonction skewness
La fonction skewness calcule l'asymétrie de l'expression x.
Syntaxe
skewness(x)
Paramètres
|
Paramètre |
Description |
|
x |
Expression évaluée comme un type double ou bigint. |
Type de valeur renvoyée
double
Exemple
Calculez l'asymétrie des valeurs du champ request_time.
-
Instruction de requête et d'analyse (Déboguer)
*| SELECT skewness(request_time) AS skewness Résultats de la requête et de l'analyse : la valeur skewness est
0.00042944441602043965.
Fonction sum
La fonction sum additionne les valeurs de l'expression x.
Syntaxe
sum(x)
Paramètres
|
Paramètre |
Description |
|
x |
Expression évaluée comme un type double, bigint, decimal ou real. |
Type de valeur renvoyée
Identique au type de données de l'expression d'entrée.
Exemples
Calculez le trafic quotidien d'un site web.
-
Instruction de requête et d'analyse (déboguer)
* | SELECT date_trunc('day', __time__) AS time, sum(body_bytes_sent) AS body_bytes_sent GROUP BY time ORDER BY time Résultats de la requête et de l'analyse : après exécution de l'instruction de requête et d'analyse, un tableau de résultats statistiques agrégés par jour est renvoyé, contenant la somme de
body_bytes_sentpour un total de cinq jours, du 19/09/2023 au 23/09/2023.