

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

# CloudTrail Lake SQL 限制條件
<a name="query-limitations"></a>

**注意**  
AWS CloudTrail Lake 自 2026 年 5 月 31 日起不再向新客戶開放。如果您想要使用 CloudTrail Lake，請在該日期之前註冊。現有客戶可以繼續正常使用該服務。如需詳細資訊，請參閱[CloudTrail Lake 可用性變更](cloudtrail-lake-service-availability-change.md)。

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 支援所有有效的 Trino SQL `SELECT`陳述式、函數和運算子。如需支援的 SQL 函數和運算子的詳細資訊，請參閱 Trino 文件網站上的[函數和運算子](https://trino.io/docs/current/functions.html)。

CloudTrail 主控台提供許多範例查詢，可協助您開始自行編寫查詢。如需詳細資訊，請參閱[使用 CloudTrail 主控台檢視範例查詢](lake-console-queries.md)。

如需如何最佳化查詢的資訊，請參閱 [最佳化 CloudTrail Lake 查詢](lake-queries-optimization.md)。

**Topics**
+ [支援的函數、條件和聯結運算子](#query-aggregates-condition-operators)
+ [進階的多重資料表查詢支援](#query-advanced-multi-table)

## 支援的函數、條件和聯結運算子
<a name="query-aggregates-condition-operators"></a>

**支援的函數**

CloudTrail Lake 支援所有 Trino 函數。如需支援函數的詳細資訊，請參閱 Trino 文件網站上的[函數和運算子](https://trino.io/docs/current/functions.html)。

**支援的條件運算子**

下列是支援的條件運算子。

```
AND
OR
IN
NOT
IS (NOT) NULL
LIKE
BETWEEN
GREATEST
LEAST
IS DISTINCT FROM
IS NOT DISTINCT FROM
<
>
<=
>=
<>
!=
( conditions ) #parenthesised conditions
```

**支援的聯結運算子**

以下是支援的 `JOIN` 運算子。如需執行多重資料表查詢的詳細資訊，請參閱 [進階的多重資料表查詢支援](#query-advanced-multi-table)。

```
UNION 
UNION ALL 
EXCEPT 
INTERSECT 
LEFT JOIN 
RIGHT JOIN 
INNER JOIN
```

## 進階的多重資料表查詢支援
<a name="query-advanced-multi-table"></a>

CloudTrail Lake 支援跨多個事件資料存放區的進階查詢語言。
+ [`UNION|UNION ALL|EXCEPT|INTERSECT`](#query-multi-table-union)
+ [`LEFT|RIGHT|INNER JOIN`](#query-multi-table-left-right)

若要執行查詢，請在 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`
<a name="query-multi-table-union"></a>

以下是使用 `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`
<a name="query-multi-table-left-right"></a>

以下是一個範例查詢，其使用 `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;
```