

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

# join
<a name="CWL_QuerySyntax-Join"></a>

將來源日誌群組的日誌事件與另一個日誌群組的事件結合，或根據相符欄位查詢結果。

使用 `join`命令來關聯不同來源之間的相關日誌事件，例如日誌群組，並使用其通用的金鑰，例如相符的請求識別符或交易 IDs。

**語法**  


```
join type=<join_type> left=<left_alias> right=<right_alias> 
    where <left_alias>.<field>=<right_alias>.<field> 
    (SOURCE <right_log_group>)
```

**Parameters**  

+ `<right_log_group>` – 要加入的次要資料來源。
+ `<left_alias>` 和 `<right_alias>` – 用於區分欄位與左 （主要） 和右 （次要） 資料來源的別名。
+ `where <field>` – 指定用作聯結金鑰的欄位。欄位必須存在於兩個資料來源中。
+ `type=<join_type>` （選用） – 指定聯結類型。有效的值如下：
  + `inner` （預設） – 僅傳回相符的記錄
  + `left` – 傳回來自主要資料來源的所有記錄，以及來自次要資料來源的相符記錄

**範例**  


**Example 範例 1：將 API Gateway 請求與 Lambda 執行日誌建立關聯**  
此範例說明如何將 API Gateway 存取日誌加入 Lambda 函數日誌，以將傳入的請求與其後端處理建立關聯。這有助於疑難排解end-to-end請求流程，並識別哪些 Lambda 調用對應到特定的 API 請求。  

```
filter status >= 500
| join type=inner left=api right=lambda 
    where api.requestId=lambda.requestId 
    (SOURCE '/aws/lambda/my-function')
| fields api.requestId, api.status, api.latency, lambda.duration, lambda.memoryUsed
| sort api.latency desc
```
此查詢：  

1. 查詢 API Gateway 存取日誌和伺服器錯誤的篩選條件 （狀態 >= 500)

1. 使用顯示在兩個日誌來源中的 `requestId` 欄位，與 Lambda 函數日誌聯結

1. 使用別名 (`api` 和 `lambda`) 來區分欄位與每個來源

1. 傳回顯示 API 延遲以及 Lambda 執行持續時間和記憶體用量的合併資訊

1. 依 API 延遲排序結果，以識別最慢的請求

**Example 範例 2：追蹤跨微服務間的分散式交易**  
偵錯微服務架構中的問題時，您通常需要跨多個服務追蹤交易。此範例示範如何使用通用交易 ID 從兩個不同的服務加入日誌。  

```
filter eventType = "ORDER_CREATED"
| join type=left left=order right=payment 
    where order.transactionId=payment.transactionId 
    (SOURCE '/aws/lambda/payment-service')
| filter payment.eventType = "PAYMENT_PROCESSED" or !ispresent(payment.eventType)
| fields order.transactionId, order.orderId, order.customerId, 
    payment.paymentStatus, payment.amount
| filter payment.paymentStatus != "SUCCESS" or !ispresent(payment.paymentStatus)
```
此查詢：  

1. 從訂單服務中的訂單建立事件開始

1. 使用 `left join`來包含所有訂單，甚至是沒有相符付款記錄的訂單

1. 使用共用`transactionId`欄位與付款處理事件聯結

1. 篩選最終結果，僅顯示付款失敗或缺少付款記錄的訂單
此處的左聯結很重要，因為它可確保您看到已建立但從未發生對應付款事件的訂單，這可能表示系統故障。

**Behavior (行為)**  

+ 主要資料來源 （左側） 會先處理。
+ 次要資料來源會使用指定的聯結金鑰進行評估和比對。
+ 在聯結欄位上使用等式比較來執行比對。
+ 對於左聯結，來自主要資料來源的不相符記錄會保留為次要欄位的 null 值。

**備註與限制**  

+ 僅支援等式 (=) 條件。
+ 每個查詢僅支援一個聯結命令。
+ 聯結金鑰必須同時存在於兩個資料來源中，且具有相容的類型。
+ 使用聯結的查詢可能會掃描更多資料並產生更高的成本。
+ 次要資料來源中唯一索引鍵值的數量限制為 50，000 個，以確保查詢效能。
+ 不支援聯結右側的子查詢。

**相關命令**  

+ [欄位](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)