本文介绍条件表达式的基本语法和示例。
日志服务支持如下条件表达式。
表达式 | 语法 | 说明 | 支持SQL | 支持SPL |
CASE WHEN condition1 THEN result1 [WHEN condition2 THEN result2] [ELSE result3] END | 通过条件判断,对数据进行归类。 | √ | √ | |
IF(condition, result1) | 如果condition为true,则返回result1,否则返回null。 | √ | √ | |
IF(condition, result1, result2) | 如果condition为true,则返回result1,否则返回result2。 | √ | √ | |
COALESCE(expression1, expression2, expression3...) | 返回多个表达式中第一个非null的值。 | √ | √ | |
NULLIF(expression1, expression2) | 比较两个表达式的值是否相等。如果相等,则返回null,否则返回第一个表达式的值。 | √ | × | |
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
查询和分析结果