条件表达式

本文介绍条件表达式的基本语法和示例。

日志服务支持如下条件表达式。

重要 在日志服务分析语句中,表示字符串的字符必须使用单引号('')包裹,无符号包裹或被双引号("")包裹的字符表示字段名或列名。例如:'status'表示字符串status,status"status"表示日志字段status。

表达式

语法

说明

支持SQL

支持SPL

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
    • 查询和分析结果case when

  • 示例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
    • 查询和分析结果case when

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
  • 查询和分析结果IF语法

COALESCE表达式

COALESCE表达式用于返回多个表达式中第一个非null的值。

语法

COALESCE(expression1, expression2, expression3...)

参数说明

参数

说明

expression

任何类型的表达式。

示例

计算昨天消费金额与上月同一天的比值。

  • 查询和分析语句

    * |
    SELECT
      compare("昨天消费金额", 604800) AS diff
    FROM  (
        SELECT
          COALESCE(sum(PretaxAmount), 0) AS "昨天消费金额"
        FROM log
      )
  • 查询和分析结果coalesce语法

    • 6514393413.0表示昨天的消费金额。

    • 19578267596.0表示上月同一天的消费金额。

    • 0.33273594719539659表示昨天与上月同一天的消费金额比值。

NULLIF表达式

NULLIF表达式用于比较两个表达式的值是否相等。如果相等,则返回null,否则返回第一个表达式的值。

语法

NULLIF(expression1, expression2)

参数说明

参数

说明

expression

任何有效的标量表达式。

示例

判断client_iphost两个字段的值是否相同。当不相同时,返回client_ip字段的值。

  • 查询和分析语句

    * | SELECT NULLIF(client_ip,host)
  • 查询和分析结果nullif语法

TRY表达式

TRY表达式用于捕获异常信息,使得系统继续执行查询和分析操作。

语法

TRY(expression)

参数说明

参数

说明

expression

任何类型的表达式。

示例

当执行regexp_extract函数发生异常时,try函数会捕获异常信息并继续查询和分析操作,返回查询和分析结果。

  • 查询和分析语句

    * |
    SELECT
      TRY(regexp_extract(request_uri, '.*\/(file.*)', 1)) AS file,
      count(*) AS count
    GROUP BY
      file
  • 查询和分析结果try语法