

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# 結合
<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>)
```

**パラメータ**  

+ `<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のリクエストフローのトラブルシューティングや、特定の API リクエストに対応する Lambda 呼び出しの特定に役立ちます。  

```
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. Lambda の実行時間とメモリ使用量とともに API レイテンシーを示す複合情報を返します。

1. API レイテンシーで結果をソートして、最も遅いリクエストを特定します

**Example 例 2: マイクロサービス間の分散トランザクションを追跡する**  
マイクロサービスアーキテクチャで問題をデバッグする場合、多くの場合、複数のサービスにわたるトランザクションを追跡する必要があります。この例では、共通のトランザクション ID を使用して 2 つの異なるサービスのログを結合する方法を示します。  

```
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. 最終結果をフィルタリングして、支払いに失敗した注文または支払いレコードが欠落している注文のみを表示します
ここで左結合は重要です。これは、作成されたが、システム障害を示す可能性のある対応する支払いイベントがなかった注文が表示されるためです。

**行動**  

+ プライマリデータソース (左側) が最初に処理されます。
+ セカンダリデータソースは、指定された結合キーを使用して評価および照合されます。
+ 一致は、結合フィールドの等価比較を使用して実行されます。
+ 左結合の場合、プライマリデータソースからの一致しないレコードは、セカンダリフィールドの null 値で保持されます。

**注意事項と制限事項**  

+ 等価 (=) 条件のみがサポートされています。
+ クエリごとにサポートされる結合コマンドは 1 つだけです。
+ 結合キーは両方のデータソースに存在し、互換性のあるタイプである必要があります。
+ 結合を使用するクエリは、より多くのデータをスキャンしてコストが高くなる可能性があります。
+ クエリのパフォーマンスを確保するために、セカンダリデータソースの一意のキー値の数は 50,000 に制限されています。
+ 結合の右側にあるサブクエリはサポートされていません。

**関連コマンド**  

+ [フィールド](CWL_QuerySyntax-Fields.md)
+ [フィルター](CWL_QuerySyntax-Filter.md)
+ [解析](CWL_QuerySyntax-Parse.md)
+ [stats](CWL_QuerySyntax-Stats.md)
+ [ソート](CWL_QuerySyntax-Sort.md)
+ [制限](CWL_QuerySyntax-Limit.md)