本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
OpenSearch SQL 语言
本节包含使用 OpenSearch SQL 查询 CloudWatch 日志的基本介绍。如果你习惯使用关系数据库,它提供了一个熟悉的选项。 OpenSearch SQL 提供了 SQL 功能的子集,使其成为执行临时查询和数据分析任务的理想选择。在 S OpenSearch QL 中,您可以使用诸如 SELECT、FROM、WHERE、GROUP BY、HAVING 等命令和各种其他 SQL 命令和函数。您可以 JOINs 跨日志组执行,使用子查询关联日志组中的数据,并使用丰富的 JSON、数学、字符串、条件和其他 SQL 函数集对日志和安全数据进行强有力的分析。
您只能 OpenSearch 将 SQL 用于查询标准日志类中的日志组。
下表列出了 CloudWatch 日志中支持的 SQL 命令和函数。有关包括语法在内的所有 OpenSearch SQL 命令的信息,请参阅《 OpenSearch 服务开发人员指南》中支持的 SQL 命令。
支持的 SQL 命令
命令或功能 | 示例查询 | 描述 |
---|---|---|
SELECT |
|
显示预测值。 |
FROM |
|
内置子句,用于指定要从中检索数据的源表或视图,支持各种类型的联接和子查询。 |
WHERE |
|
根据提供的字段条件筛选日志事件。 |
GROUP BY |
|
根据类别对记录事件进行分组,并根据统计数据查找平均值。 |
HAVING |
|
根据分组条件筛选结果。 |
ORDER BY |
|
根据 ORDER BY 子句中的字段对结果进行排序。您可以按降序或升序排序。 |
JOIN |
|
根据常用字段连接两个表的结果。必须指定 “内连接” 或 “左外连接” |
LIMIT |
|
将显示的查询结果限制在前 N 行。 |
字符串函数 |
|
SQL 中的内置函数,可以在 SQL 查询中操作和转换字符串和文本数据。例如,转换大小写、合并字符串、提取部分和清理文本。 |
日期函数 |
|
用于在 SQL 查询中处理和转换日期和时间戳数据的内置函数。例如,date_add、date_format、datediff 和当前日期。 |
条件函数 |
|
基于指定条件执行操作或有条件地评估表达式的内置函数。例如,大小写和如果。 |
聚合函数 |
|
内置函数,可对多行执行计算以生成单个汇总值。例如,总和、计数、平均值、最大值和最小值。 |
JSON 函数 |
|
内置函数,用于在 SQL 查询中解析、提取、修改和查询 JSON 格式的数据(例如,from_json、to_json、get_json_object、json_tuple),允许操作数据集中的 JSON 结构。 |
数组函数 |
|
用于在 SQL 查询中处理数组类型列的内置函数,允许诸如访问、修改和分析数组数据(例如,大小、爆炸、array_contains)之类的操作。 |
窗口函数 |
|
内置函数,可对与当前行(窗口)相关的一组指定行进行计算,从而实现排名、运行总数和移动平均值等操作。例如,ROW_NUMBER、RANK、LAG 和 LEAD |
转换函数 |
|
内置函数,用于在 SQL 查询中将数据从一种类型转换为另一种类型,从而实现数据类型转换和格式转换。例如,CAST、TO_DATE、TO_TIMESTAMP 和 BINARY。 |
谓词函数 |
|
基于指定条件或模式评估条件并返回布尔值(真/假)的内置函数。例如,IN、LIKE、BETWEEN、为空和存在。 |
选择多个日志组 |
|
允许您在 SELECT 语句中指定多个日志组 |
支持用于 multi-log-group查询的 SQL
要支持在 SQL 中查询多个日志组的用例,可以使用logGroups
命令。使用此语法,您可以通过在 FROM 命令中指定多个日志组来查询它们。
语法:
`logGroups( logGroupIdentifier: ['LogGroup1','LogGroup2', ...'LogGroupn'] )
在此语法中,您最多可以在logGroupIdentifier
参数中指定 50 个日志组。要引用监控账户中的日志组,请使用 ARNs 而不是LogGroup
名称。
示例查询:
SELECT LG1.Column1, LG1.Column2 from `logGroups( logGroupIdentifier: ['LogGroup1', 'LogGroup2'] )` as LG1 WHERE LG1.Column1 = 'ABC'
查询日志时,不支持在语FROM
句后使用以下涉及多个 CloudWatch 日志组的语法。
SELECT Column1, Column2 FROM 'LogGroup1', 'LogGroup2', ...'LogGroupn' WHERE Column1 = 'ABC'
限制
当您使用 OpenSearch SQL 在 Lo CloudWatch gs Insights 中进行查询时,以下限制适用。
在一个 SELECT 语句中只能包含一个 JOIN。
仅支持一个级别的嵌套子查询。
不支持用分号 (;) 分隔的多个语句查询。
不支持包含相同但仅在大小写上不同的字段名称的查询(例如 field1 和 FIELD1)。
例如,不支持以下查询:
Select AWSAccountId, AwsAccountId from LogGroup
但是,由于两个日志组中的字段名 (
@logStream
) 相同,因此支持以下查询:Select a.`@logStream`, b.`@logStream` from Table A INNER Join Table B on a.id = b.id
函数和表达式必须对字段名进行操作,并且是 SELECT 语句的一部分,日志组在 FROM 子句中指定。
例如,不支持以下查询:
SELECT cos(10) FROM LogGroup
支持此查询:
SELECT cos(field1) FROM LogGroup
使用 SQL 或 PPL 命令时,请将某些字段用反引号括起来,以便成功查询它们。对于带有特殊字符(非字母和非数字)的字段,必须使用反引号。例如,用反引号
@message
将Operation.Export
、和Test::Field
括起来。您无需用反引号将纯字母名称的列括起来。包含简单字段的查询示例:
SELECT SessionToken, Operation, StartTime FROM `LogGroup-A` LIMIT 1000;
附加了反引号的类似查询:
SELECT `@SessionToken`, `@Operation`, `@StartTime` FROM `LogGroup-A` LIMIT 1000;