本文介绍条件表达式的基本语法和示例。
日志服务支持如下条件表达式。
注意 在日志服务分析语句中,表示字符串的字符必须使用单引号('')包裹,无符号包裹或被双引号("")包裹的字符表示字段名或列名。例如:'status'表示字符串status,status或"status"表示日志字段status。
表达式 | 语法 | 说明 |
---|---|---|
CASE WHEN表达式 | CASE WHEN condition1 THEN result1 [WHEN condition2 THEN result2] [ELSE result3] END |
通过条件判断,对数据进行归类。 |
IF表达式 | IF(condition, result1) | 如果condition为true,则返回result1,否则返回null。 |
IF(condition, result1, result2) | 如果condition为true,则返回result1,否则返回result2。 | |
COALESCE表达式 | COALESCE(expression1, expression2, expression3...) | 返回多个表达式中第一个非null的值。 |
NULLIF表达式 | NULLIF(expression1, expression2) | 比较两个表达式的值是否相等。如果相等,则返回null,否则返回第一个表达式的值。 |
TRY表达式 | TRY(expression) | 捕获异常信息,使得系统继续执行查询和分析操作。 |
CASE WHEN表达式
CASE WHEN表达式用于对数据进行归类。
语法
CASE WHEN condition1 THEN result1
[WHEN condition2 THEN result2]
[ELSE result3]
END
参数说明
参数 | 说明 |
---|---|
condition | 条件表达式。 |
result1 | 返回结果。 |
示例
- 示例1:从http_user_agent字段值中提取浏览器信息,归为Chrome、Safari和unknown三种类型并计算三种类型对应的访问PV。
- 查询和分析语句
* | 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
- 查询和分析结果
- 查询和分析语句
- 示例2:统计不同请求时间的分布情况。
- 查询和分析语句
* | 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
- 查询和分析结果
- 查询和分析语句
IF表达式
IF表达式用于对数据进行归类,类似于CASE WHEN表达式。
语法
- 如果condition为true,则返回result1,否则返回null。
IF(condition, result1)
- 如果condition为true,则返回result1,否则返回result2。
IF(condition, result1, result2)
参数说明
参数 | 说明 |
---|---|
condition | 条件表达式。 |
result | 返回结果 |
示例
计算状态码为200的请求占所有请求的比例。
- 查询和分析语句
* | SELECT sum(IF(status = 200, 1, 0)) * 1.0 / count(*) AS status_200_percentag
- 查询和分析结果
COALESCE表达式
COALESCE表达式用于返回多个表达式中第一个非null的值。
语法
COALESCE(expression1, expression2, expression3...)
参数说明
参数 | 说明 |
---|---|
expression | 任何类型的表达式。 |
示例
计算昨天消费金额与上月同一天的比值。
- 查询和分析语句
* | SELECT compare("昨天消费金额", 604800) AS diff FROM ( SELECT COALESCE(sum(PretaxAmount), 0) AS "昨天消费金额" FROM log )
- 查询和分析结果
- 6514393413.0表示昨天的消费金额。
- 19578267596.0表示上月同一天的消费金额。
- 0.33273594719539659表示昨天与上月同一天的消费金额比值。
NULLIF表达式
NULLIF表达式用于比较两个表达式的值是否相等。如果相等,则返回null,否则返回第一个表达式的值。
语法
NULLIF(expression1, expression2)
参数说明
参数 | 说明 |
---|---|
expression | 任何有效的标量表达式。 |
示例
判断client_ip、host两个字段的值是否相同。当不相同时,返回client_ip字段的值。
- 查询和分析语句
* | SELECT NULLIF(client_ip,host)
- 查询和分析结果
TRY表达式
TRY表达式用于捕获异常信息,使得系统继续执行查询和分析操作。
语法
TRY(expression)
参数说明
参数 | 说明 |
---|---|
expression | 任何类型的表达式。 |
示例
当执行regexp_extract函数发生异常时,try函数会捕获异常信息并继续查询和分析操作,返回查询和分析结果。
- 查询和分析语句
* | SELECT TRY(regexp_extract(request_uri, '.*\/(file.*)', 1)) AS file, count(*) AS count GROUP BY file
- 查询和分析结果