比较运算符用于判断参数的大小关系,适用于任意可比较的数据类型(double、bigint、varchar、timestamp和date)。本文介绍比较运算符的基本语法以及示例。

注意 在日志服务分析语句中,表示字符串的字符必须使用单引号('')包裹,无符号包裹或被双引号("")包裹的字符表示字段名或列名。例如:'status'表示字符串status,status"status"表示日志字段status。
运算符 语法 说明
基础运算符 x < y x小于y时,返回true。
x > y x大于y时,返回true。
x <= y x小于或等于y时,返回true。
x >= y x大于或等于y时,返回true。
x = y x等于y时,返回true。
x <> y x不等于y时,返回true。
x != y x不等于y时,返回true。
all运算符 x 基础运算符 all(subquery) x满足所有条件时,返回true。
any运算符 x 基础运算符 any(subquery) x满足任意一个条件时,返回true。
between运算符 x between y and z x处在yz之间时,返回true。
distinct运算符 x is distinct from y x不等于y时,返回true。
x is not distinct from y x等于y时,返回true。
like运算符 x like pattern [escape 'escape_character'] 用于匹配字符串中指定的字符模式。字符串区分大小写。
some运算符 x 基础运算符 some(subquery) x满足任意一个条件时,返回true。
greatest运算符 greatest(x, y...) 查询xy中的最大值。
least运算符 least(x, y...) 查询xy中的最小值。
null运算符 x is null x为null时,返回true。
x is not null x为不为null时,返回true。

基础运算符

基础运算符用于比较xy的大小关系。如果逻辑成立,则返回true。

语法

语法 说明
x < y x小于y
x > y x大于y
x <= y x小于或等于y
x >= y x大于或等于y
x = y x等于y
x <> y x不等于y
x != y x不等于y

参数说明

参数 说明
x 参数值为任意可比较的数据类型。
y 参数值为任意可比较的数据类型。

返回值类型

boolean类型。

示例

  • 示例1:查询昨天的日志。
    • 查询和分析语句
      * |
      SELECT
        *
      FROM  log
      WHERE
        __time__ < to_unixtime(current_date)
        AND __time__ > to_unixtime(date_add('day', -1, current_date))
    • 查询和分析结果current_date
  • 示例2:电商公司A通过访问日志中的mobile字段和client_ip字段,分析哪些客户的电话号码所在地和其访问电商网站的IP地址所在地不同。
    • 字段样例
      mobile:1881111****
      client_ip:192.168.2.0
    • 查询和分析语句
      * |
      SELECT
        mobile,
        client_ip,
        count(*) as PV
      WHERE
        mobile_city(mobile) != ip_to_city(client_ip)
        AND ip_to_city(client_ip) != ''
      GROUP BY
        client_ip,
        mobile
      ORDER BY
        PV DESC
    • 查询和分析结果mobile_city

all运算符

all运算符用于判断x是否满足所有条件。如果满足,则返回true。

语法

x 基础运算符 all(subquery)

参数说明

参数 说明
x 参数值为任意可比较的数据类型。
比较运算符 <、>、<=、>=、=、<>、!=
注意 all运算符必须紧跟在基础运算符(<、>、<=、>=、=、<>、!=)后面。
subquery SQL子查询。

返回值类型

boolean类型。

示例

实例i-01相关的所有请求的状态码是否都为200。

  • 字段样例
    instance_id:i-01
    status:200
  • 查询和分析语句
    * | select 200 = all(select status where instance_id='i-01')
  • 查询和分析结果all

any运算符

any运算符用于判断x是否满足任意一个条件。如果满足,则返回true。

语法

x 比较运算符 any(subquery)

参数说明

参数 说明
x 参数值为任意可比较的数据类型。
比较运算符 <、>、<=、>=、=、<>、!=
注意 any运算符必须紧跟在比较运算符(<、>、<=、>=、=、<>、!=)后面。
subquery SQL子查询。

返回值类型

boolean类型。

示例

实例i-01相关的请求中,是否存在请求状态码为200的请求。

  • 字段样例
    instance_id:i-01
    status:200
  • 查询和分析语句
    * | select 200 = any(select status where instance_id='i-01')
  • 查询和分析结果any

between运算符

between用于判断x是否处在yz之间。如果是,则返回true。yz之间的范围为闭区间。

语法

x between y and z

参数说明

参数 说明
x 参数值为任意可比较的数据类型。
y 参数值为任意可比较的数据类型。
z 参数值为任意可比较的数据类型。
注意
  • xyz的数据类型必须一致。
  • xyz中任意一个的值包含null,则返回结果为null。

返回值类型

boolean类型。

示例

  • 示例1:判断status字段值是否在[200,299]范围内。
    • 查询和分析语句
      * | select status between 200 and 299
    • 查询和分析结果BETWEEN
  • 示例2:计算status字段值不在[200,299]范围内的日志条数。
    • 查询和分析语句
      * | select count(*) as count from log where status not between 200 and 299
    • 查询和分析语法between

distinct运算符

distinct运算符用于判断xy是否相同。

语法

  • is distinct from表示x不等于y时,返回true。
    x is distinct from y
  • is not distinct from表示x等于y时,返回true。
    x is not distinct from y

参数说明

参数 说明
x 参数值为任意可比较的数据类型。
y 参数值为任意可比较的数据类型。
与基础运算符(=、<>)对比,区别在于distinct运算符可用于null的对比。
x y x = y x <> y x is distinct from y x is not distinct from y
1 1 true false false true
1 2 false true true false
1 null null null true false
null null null null false true

返回值类型

boolean类型。

示例

将0和null进行对比。

  • 查询和分析语句
    * | select 0 is distinct from null
  • 查询和分析结果distinct

like运算符

like运算符用于匹配字符串中指定的字符模式。字符串区分大小写。

语法

x like pattern [escape 'escape_character']

参数说明

参数 说明
x 参数值为任意可比较的数据类型。
pattern 字符模式,包括字符串和通配符。通配符说明如下:
  • 百分号(%)代表任意个字符。
  • 下划线 (_)代表单个字符。
escape_character 对字符模式中的元字符进行转义的字符表达式。
说明 like运算符主要用于日志的精准查询。更多信息,请参见如何精准查询日志

返回值类型

boolean类型。

示例

  • 示例1:查询request_uri字段值是以file-8或file-6结尾的日志。
    • 字段样例
      request_uri:/request/path-2/file-6
    • 查询和分析语句
      *|select *  where request_uri like '%file-8' OR request_uri like '%file-6'
    • 查询和分析结果OR
  • 示例2:判断request_uri字段值是否以file-6结尾。
    • 字段样例
      request_uri:/request/path-2/file-6
    • 查询和分析语句
      * | select request_uri like '%file-6'
    • 查询和分析结果like

some运算符

some运算符用于判断x是否满足任意一个条件。如果满足,则返回true。

语法

x 比较运算符 some(subquery)

参数说明

参数 说明
x 参数值为任意可比较的数据类型。
比较运算符 <、>、<=、>=、=、<>、!=
注意 some运算符必须紧跟在比较运算符(<、>、<=、>=、=、<>、!=)后面。
subquery SQL子查询。

返回值类型

boolean类型。

示例

实例i-01相关的请求中,是否存在请求时长小于20s的请求。

  • 字段样例
    instance_id:i-01
    request_time:16
  • 查询和分析语句
    * | select 20 > some(select request_time where instance_id='i-01')
  • 查询和分析结果any

greatest运算符

greatest运算符用于获取xy中的最大值。
说明 greatest运算符用于横向对比,max函数用于纵向对比。

语法

greatest(x, y...)

参数说明

参数 说明
x 参数值为任意可比较的数据类型。
y 参数值为任意可比较的数据类型。

返回值类型

double类型。

示例

对同一行中的request_time字段值和status字段值进行对比,获取其中的最大值。

  • 字段样例
    request_time:38
    status:200
  • 查询和分析语句
    * |  SELECT greatest(request_time,status)
  • 查询和分析结果greatest

least运算符

least运算符用于获取xy中的最小值。
说明 least运算符用于横向对比,min函数用于纵向对比。

语法

least(x, y...)

参数说明

参数 说明
x 参数值为任意可比较的数据类型。
y 参数值为任意可比较的数据类型。

返回值类型

double类型。

示例

对同一行中的request_time字段值和status字段值进行对比,获取其中的最小值。

  • 字段样例
    request_time:77
    status:200
  • 查询和分析语句
    * |  SELECT least(request_time,status)
  • 查询和分析结果least

null运算符

null运算符用于判断x是否为null。

语法

  • is null表示参数值为null时,返回true。
    x is null
  • is not null表示参数值不为null时,返回true。
    x is not null

参数说明

参数 说明
x 参数值为任意可比较的数据类型。

返回值类型

boolean类型。

示例

  • 示例1:判断status字段值是否为null。
    • 查询和分析语句
      * | select status is null
    • 查询和分析结果is null
  • 示例2:统计status字段值不为空的日志条数。
    • 查询和分析语句
      * | select count(*) as count from log where status is not null
    • 查询和分析结果is not null