本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
CloudTrail Lake SQL 限制
CloudTrail Lake 查询是 SQL 字符串。本节提供有关支持的函数、运算符和架构相关信息。
仅允许使用 SELECT
语句。没有查询字符串可以更改或变更数据。
SELECT
语句的 CloudTrail Lake 语法如下所示。事件数据存储 ID(事件数据存储 ARN 的 ID 部分)是为 FROM
值指定的。
SELECT [ DISTINCT ] columns [ Aggregate ] [ FROM table
event_data_store_ID
] [ WHERE columns [ Conditions ] ] [ GROUP BY columns [ DISTINCT | Aggregate ] ] [ HAVING columns [ Aggregate | Conditions ] ] [ ORDER BY columns [ Aggregate | ASC | DESC | NULLS | FIRST | LAST ] [ LIMIT [ INT ] ]
CloudTrail Lake 支持所有有效的 Presto SQL SELECT
语句、函数和运算符。如需详细了解支持的 SQL 函数和运算符,请参阅 Presto 文档网站中的函数和运算符
CloudTrail 控制台提供了很多示例查询,可以帮助您开始编写您自己的查询。有关更多信息,请参阅 使用 CloudTrail 控制台查看示例查询。
支持的函数、条件和联接运算符
支持的函数
CloudTrail Lake 支持所有 Presto 函数。如需详细了解支持的函数,请参阅 Presto 文档网站中的函数和运算符
支持的条件运算符
以下是支持的条件运算符。
AND OR IN NOT IS (NOT) NULL LIKE BETWEEN GREATEST LEAST IS DISTINCT FROM IS NOT DISTINCT FROM < > <= >= <> != ( conditions ) #parenthesised conditions
支持的联接运算符
以下是支持的 JOIN
运算符。有关运行多表查询的更多信息,请参阅 高级多表查询支持。
UNION UNION ALL EXCEPT INTERSECT LEFT JOIN RIGHT JOIN INNER JOIN
高级多表查询支持
CloudTrail Lake 支持跨多个事件数据存储的高级查询语言。
要运行查询,请在 AWS CLI 中使用 start-query 命令。以下是一个示例,它使用本节中的一个示例查询。
aws cloudtrail start-query --query-statement "Select eventId, eventName from EXAMPLEf852-4e8f-8bd1-bcf6cEXAMPLE UNION Select eventId, eventName from EXAMPLEg741-6y1x-9p3v-bnh6iEXAMPLE UNION ALL Select eventId, eventName from EXAMPLEb529-4e8f9l3d-6m2z-lkp5sEXAMPLE ORDER BY eventId LIMIT 10;"
响应是 QueryId
字符串。要获取查询的状态,请使用 start-query
返回的值 QueryId
运行 describe-query
。如果查询成功,您可以运行 get-query-results
以获取结果。
UNION|UNION
ALL|EXCEPT|INTERSECT
以下是一个示例查询,它使用 UNION
和 UNION ALL
在三个事件数据存储(EDS1、EDS2 和 EDS3)中按它们的事件 ID 和事件名称查找事件。首先从每个事件数据存储中选择结果,然后将结果串联起来,按事件 ID 排序,并限制为十个事件。
Select eventId, eventName from EDS1 UNION Select eventId, eventName from EDS2 UNION ALL Select eventId, eventName from EDS3 ORDER BY eventId LIMIT 10;
LEFT|RIGHT|INNER
JOIN
以下是一个示例查询,它使用 LEFT JOIN
查找名为 eds2
、映射到 edsB
的事件数据存储中的所有事件,这些事件与主(左侧)事件数据存储 edsA
中的事件匹配。返回的事件发生在 2020 年 1 月 1 日或之前,并且仅返回事件名称。
SELECT edsA.eventName, edsB.eventName, element_at(edsA.map, 'test') FROM eds1 as edsA LEFT JOIN eds2 as edsB ON edsA.eventId = edsB.eventId WHERE edsA.eventtime <= '2020-01-01' ORDER BY edsB.eventName;