

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

# subqueries
<a name="CWL_QuerySyntax-Subqueries"></a>

子查詢是巢狀 Logs Insights 查詢，可做為另一個查詢的輸入。子查詢可用來衍生後續命令使用的中繼結果集。

**語法**  


**篩選條件中的子查詢**  


```
filter <field> in (
    <subquery>
)
```

**Parameters**  

+ `<subquery>` – 傳回結果集的有效 Logs Insights 查詢。子查詢必須產生外部查詢參考的欄位。

**範例**  


**Example 範例 1：尋找在下游服務中遇到錯誤的請求**  
此範例說明如何使用子查詢來識別主要服務中導致下游服務發生錯誤的請求。這對於對分散式系統中的串聯失敗進行故障診斷非常有用。  

```
filter requestId in (
    SOURCE '/aws/lambda/database-service'
    | filter errorType = "DatabaseConnectionTimeout"
    | fields requestId
)
| fields @timestamp, requestId, endpoint, userId, responseTime
| sort @timestamp desc
```
此查詢：  

1. 子查詢會從發生連線逾時的資料庫服務尋找所有`requestId`值

1. 外部查詢會篩選主要服務的日誌，僅顯示符合這些易出錯請求 IDs請求

1. 結果顯示下游失敗請求的完整內容，包括哪些端點和使用者受到影響
此模式可協助您了解下游故障的上游影響。

**Example 範例 2：識別目標調查經常失敗的請求**  
此範例示範使用具有彙總的子查詢來尋找重複失敗的請求，這通常表示系統性問題，而不是暫時性錯誤。  

```
filter requestId in (
    SOURCE '/aws/lambda/payment-processor'
    | filter status = "FAILED"
    | stats count(*) as failureCount by requestId
    | filter failureCount > 3
    | fields requestId
)
| fields @timestamp, requestId, customerId, amount, failureReason
| sort @timestamp asc
```
此查詢：  

1. 子查詢會彙總失敗的付款嘗試，並識別失敗超過 3 次的請求 IDs 

1. 外部查詢會擷取這些有問題請求 IDs的所有日誌事件

1. 結果會依時間順序排序，以顯示重試嘗試的進度
這有助於區分暫時性故障 （單一發生） 和需要更深入調查的持續性問題 （多重故障）。

**Behavior (行為)**  

+ 子查詢會獨立於外部查詢執行。
+ 結果會在外部查詢取用之前具體化。
+ 只有子查詢中明確選取的欄位可供外部查詢使用。

**備註與限制**  

+ 子查詢必須傳回外部查詢參考的欄位。
+ 不支援巢狀子查詢。
+ 子查詢可能會增加查詢執行時間和成本。
+ 不支援相關的子查詢。
+ 內部查詢執行限制為 30 秒。

**相關命令**  

+ [欄位](CWL_QuerySyntax-Fields.md)
+ [篩選條件](CWL_QuerySyntax-Filter.md)
+ [剖析](CWL_QuerySyntax-Parse.md)
+ [統計資料](CWL_QuerySyntax-Stats.md)
+ [排序](CWL_QuerySyntax-Sort.md)
+ [limit](CWL_QuerySyntax-Limit.md)