高级查询的SQL语法

您可以在高级查询中使用SQL语法,查询或分析您通过跟踪投递到日志服务SLS的日志事件。

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

查询示例

  • 全文查询

    通过指定关键字(字段名称或字段值)查询。

    示例:在日志中查询包含关键字DescribeInstances的事件。

    DescribeInstances 
  • 属性精确查询

    按照[事件属性名称]:[事件属性值]的格式,指定事件属性的名称和值进行精确查询。关于事件属性名称,请参见事件属性

    示例:在日志中查询事件源event.eventSourceactiontrail.cn-hangzhou.aliyuncs.com的事件。

    event.eventSource: actiontrail.cn-hangzhou.aliyuncs.com
  • 属性模糊查询

    按照[事件属性名称]:[事件属性值]的格式,指定事件属性名称,事件属性值可以在词的中间或末尾加上模糊查询关键字,即星号*(多个字符匹配)或问号?(单个字符匹配)。

    • 示例1:查询所有AccessKey访问事件。

       event.userIdentity.accessKeyId: *
    • 示例2:查询事件源event.eventSource包含actiontrail开头的所有事件。

      event.eventSource: actiontrail*
  • 多条件组合查询

    通过括号()、与AND、或OR逻辑判断符进行多条件的组合查询。

    • 示例1:查询所有访问报错的AccessKey访问事件。

      event.errorCode: * AND event.userIdentity.accessKeyId: *
    • 示例2:查询事件名称event.eventNameCreateCreateInstanceRunInstances的事件。

       event.eventName: Create  OR event.eventName: CreateInstance  OR event.eventName: RunInstances 
    • 示例3:查询云产品event.serviceNamekafka,且事件名称为CreateCreateInstanceRunInstances的事件。

      (event.serviceName: AliKafka AND ( event.eventName: Create  OR event.eventName: CreateInstance  OR event.eventName: RunInstances  )

  • 聚合分析查询

    通过日志服务SLS的聚合分析语法,对事件进行聚合统计,例如:通过 GROUP BY 语法对字段进行聚合统计。

    • 示例1:按照云产品聚合,查询各个云产品的事件量。

      * | SELECT "event.serviceName" AS service, COUNT(*) AS count FROM log GROUP BY "event.serviceName"
    • 示例2:按照用户和云产品聚合,查询事件量。

      * | SELECT "event.userIdentity.principalId" AS principalId, "event.serviceName" AS service, COUNT(*) AS count FROM log GROUP BY principalId,service

事件属性

操作审计支持的事件属性如下表所示。

分类

事件属性名称

描述

操作者

event.userIdentity.accountId

阿里云账号ID(主账号ID)。

event.userIdentity.accessKeyId

密钥ID。

event.userIdentity.principalId

请求者ID。

event.userIdentity.type

账号类型。

event.userIdentity.userName

用户名。

操作

event.serviceName

服务名称。

event.eventRW

读写类型。

event.eventName

事件名称。

event.apiVersion

版本信息。

event.errorMessage

错误信息。

event.errorCode

错误码。

关联资源

event.resourceType

资源类型。

event.resourceName

资源名称。

地点

event.acsRegion

阿里云地域。

event.eventSource

事件源。

event.sourceIpAddress

源IP地址。

其他

event.requestId

请求ID。

event.eventId

事件ID。

聚合函数

操作审计支持的聚合函数如下表所示。

函数名称

语法

说明

arbitrary函数

arbitrary(x)

返回x中任意一个非空的值。

avg函数

avg(x)

计算x的算术平均值。

bitwise_and_agg函数

bitwise_and_agg(x)

返回x中所有值按位与运算(AND)的结果。

bitwise_or_agg函数

bitwise_or_agg(x)

返回x中所有值按位或运算(OR)的结果。

bool_and函数

bool_and(boolean expression)

判断是否所有日志都满足条件。如果是,则返回true。

bool_and函数等同于every函数。

bool_or函数

bool_or(boolean expression)

判断是否存在日志满足条件。如果存在,则返回true。

checksum函数

checksum(x)

计算x的校验和。

count函数

count(*)

统计所有的日志条数。

count(1)

统计所有的日志条数,等同于count(*)。

count(x)

统计x中值不为NULL的日志条数。

count_if函数

count_if(boolean expression)

统计满足指定条件的日志条数。

every函数

every(boolean expression)

判断是否所有日志都满足条件。如果是,则返回true。

every函数等同于bool_and函数。

geometric_mean函数

geometric_mean(x)

计算x的几何平均数。

kurtosis函数

kurtosis(x)

计算x的峰度。

map_union函数

map_union(x)

返回一列Map数据的并集。 如果Map中存在相同的键,则返回的键值为其中任意一个键的值。

max函数

max(x)

查询x中的最大值。

max(x, n)

查询x中最大的n个值。返回结果为数组。

max_by函数

max_by(x, y)

查询y为最大值时对应的x值。

max_by(x, y, n)

查询最大的ny值对应的x值,返回结果为数组。

min函数

min(x)

查询x中最小值。

min(x, n)

查询x中最小的n个值。返回结果为数组。

min_by函数

min_by(x, y)

查询y为最小值时对应的x值。

min_by(x, y, n)

查询最小的ny值对应的x值。返回结果为数组。

skewness函数

skewness(x)

计算x的偏度。

sum函数

sum(x)

计算x的总值。

语法保留字

SQL分析语句中的所有保留字如下:

AND
AS
BETWEEN
BY
CASE
CAST
CROSS
CUBE
CURRENT_DATE
CURRENT_TIME
CURRENT_TIMESTAMP
DISTINCT
ELSE
END
ESCAPE
EXCEPT
EXISTS
FROM
GROUP
GROUPING
HAVING
IN
INNER
INSERT
INTERSECT
INTO
IS
JOIN
LEFT
LIKE
LIMIT
LOCALTIME
LOCALTIMESTAMP
NATURAL
NOT
NULL
ON
OR
ORDER
OUTER
RIGHT
ROLLUP
SELECT
THEN
TRUE
UNION
UNNEST
VALUES
WHEN
WHERE
WITH