CloudTrail 湖SQL限制 - AWS CloudTrail

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

CloudTrail 湖SQL限制

CloudTrail Lake 查詢是SQL字串。本節提供支援的函數、運算子和結構描述的相關資訊。

僅允許 SELECT 陳述式。任何查詢字串都無法變更或改變資料。

SELECT 陳述式的 CloudTrail Lake 語法如下所示。事件資料存放區 ID — 事件資料存放區 ID 部分 ARN— 為 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 SQLSELECT陳述式、函數和運算子。如需支援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和 在三個事件資料存放區 EDS1、 EDS2和 中UNION ALL,依事件 ID 和事件名稱尋找事件的範例查詢EDS3。會先從每個事件資料存放區中選取結果,然後將結果進行串連、依事件 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;