Cette rubrique décrit la syntaxe des expressions conditionnelles et fournit des exemples d'utilisation.
Le tableau suivant présente les expressions conditionnelles prises en charge par Simple Log Service.
Pour utiliser des chaînes de caractères dans les instructions analytiques, entourez-les de guillemets simples (''). Les chaînes non entourées de guillemets ou celles entourées de guillemets doubles ("") désignent des noms de champs ou de colonnes. Par exemple, 'status' indique la chaîne de caractères « status », tandis que status ou "status" fait référence au champ de journal « status ».
Expression | Syntaxe | Description | Prise en charge dans SQL | Prise en charge dans SPL |
CASE WHEN condition1 THEN result1 [WHEN condition2 THEN result2] [ELSE result3] END | Classe les données selon des conditions spécifiées. | √ | √ | |
IF(condition, result1) | Si condition est vraie, renvoie result1. Sinon, renvoie la valeur null. | √ | √ | |
IF(condition, result1, result2) | Si condition est vraie, renvoie result1. Sinon, renvoie result2. | √ | √ | |
COALESCE(expression1, expression2, expression3...) | Renvoie la première valeur non nulle parmi plusieurs expressions. | √ | √ | |
NULLIF(expression1, expression2) | Évalue si les valeurs de deux expressions sont identiques. Si elles le sont, renvoie la valeur null. Sinon, renvoie la valeur de la première expression. | √ | × | |
TRY(expression) | Capture les erreurs survenant lors de l'appel d'une expression et garantit que Simple Log Service peut continuer à interroger et analyser les données même en cas d'erreur. | √ | √ |
Expression CASE WHEN
L'expression CASE WHEN permet de classer les données.
Syntaxe
CASE WHEN condition1 THEN result1
[WHEN condition2 THEN result2]
[ELSE result3]
END
Paramètres
|
Paramètre |
Description |
|
condition |
La valeur de ce paramètre est une expression conditionnelle. |
|
result1 |
Résultat renvoyé. |
Exemples
-
Exemple 1 : extrayez les informations du navigateur à partir de la valeur du champ http_user_agent. Classez ensuite ces informations dans les types Chrome, Safari et inconnu, puis calculez le nombre de pages vues (PV) pour chacun de ces trois types.
-
Instruction de requête
* | SELECT CASE WHEN http_user_agent like '%Chrome%' then 'Chrome' WHEN http_user_agent like '%Safari%' then 'Safari' ELSE 'unknown' END AS http_user_agent, count(*) AS pv GROUP BY http_user_agent Les résultats de la requête et de l'analyse indiquent le nombre de pages vues (PV) pour chaque navigateur (http_user_agent) : Chrome (5563), Safari (1842) et inconnu (1666).
-
-
Exemple 2 : interrogez la distribution des requêtes envoyées à différents moments.
-
Instruction de requête
* | SELECT CASE WHEN request_time < 10 then 't10' WHEN request_time < 100 then 't100' WHEN request_time < 1000 then 't1000' WHEN request_time < 10000 then 't10000' ELSE 'large' END AS request_time, count(*) AS pv GROUP BY request_time Les résultats de la requête et de l'analyse renvoient deux enregistrements : le nombre de PV est de 1 563 542 lorsque
request_timevautt100, et de 533 lorsquerequest_timevautlarge.
-
Expression IF
L'expression IF permet de classer les données. Son fonctionnement est similaire à celui de l'expression CASE WHEN.
Syntaxe
-
Si condition est vraie, renvoie result1. Sinon, renvoie la valeur null.
IF(condition, result1) -
Si condition est vraie, renvoie result1. Sinon, renvoie result2.
IF(condition, result1, result2)
Paramètres
|
Paramètre |
Description |
|
condition |
La valeur de ce paramètre est une expression conditionnelle. |
|
result |
Résultat renvoyé. |
Exemples
Calculez la proportion de requêtes dont le code d'état est 200 par rapport à l'ensemble des requêtes.
-
Instruction de requête
* | SELECT sum(IF(status = 200, 1, 0)) * 1.0 / count(*) AS status_200_percentag Résultats de la requête et de l'analyse : la valeur de
status_200_percentageest0.884686775009848.
Expression COALESCE
L'expression COALESCE renvoie la première valeur non nulle parmi plusieurs expressions.
Syntaxe
COALESCE(expression1, expression2, expression3...)
Paramètres
|
Paramètre |
Description |
|
expression |
La valeur de ce paramètre est une expression de type arbitraire. |
Exemples
Calculez le ratio entre les dépenses de la veille et celles du même jour du mois précédent.
-
Instruction de requête
* | SELECT compare("yesterday's expenses", 604800) AS diff FROM ( SELECT COALESCE(sum(PretaxAmount), 0) AS "yesterday's expenses" FROM log ) -
Résultats de la requête et de l'analyse
La valeur 6514393413.0 correspond aux dépenses de la veille.
La valeur 19578267596.0 correspond aux dépenses du même jour du mois précédent.
La valeur 0.33273594719539659 représente le ratio entre les dépenses de la veille et celles du même jour du mois précédent.
Expression NULLIF
L'expression NULLIF évalue si les valeurs de deux expressions sont identiques. Si elles le sont, renvoie la valeur null. Sinon, renvoie la valeur de la première expression.
Syntaxe
NULLIF(expression1, expression2)
Paramètres
|
Paramètre |
Description |
|
expression |
La valeur de ce paramètre est une expression scalaire valide. |
Exemples
Évaluez si les valeurs des champs client_ip et host sont identiques. Si les valeurs diffèrent, renvoie la valeur du champ client_ip.
-
Instruction de requête
* | SELECT NULLIF(client_ip,host) Résultats de la requête et de l'analyse : la requête renvoie une seule colonne
_col0, qui affiche le résultat deNULLIF(client_ip,host). Cette fonction renvoie la valeur declient_ipsiclient_ipdiffère dehost, et renvoie NULL si elles sont identiques.
Expression TRY
L'expression TRY capture les erreurs survenant lors de l'appel d'une expression et garantit que Simple Log Service peut continuer à interroger et analyser les données même en cas d'erreur.
Syntaxe
TRY(expression)
Paramètres
|
Paramètre |
Description |
|
expression |
La valeur de ce paramètre est une expression de type arbitraire. |
Exemples
Si une erreur se produit lors de l'appel de l'expression regexp_extract, l'expression TRY capture cette erreur et Simple Log Service continue d'interroger et d'analyser les données. Les résultats de la requête et de l'analyse sont alors renvoyés.
-
Instruction de requête
* | SELECT TRY(regexp_extract(request_uri, '.*\/(file.*)', 1)) AS file, count(*) AS count GROUP BY file Les résultats de la requête et de l'analyse affichent un compte pour chaque nom de fichier extrait. Par exemple : file-5 (851), file-7 (928), file-3 (837) et file-4 (863).