

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

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

Menggabungkan peristiwa log dari grup log sumber dengan peristiwa dari grup log lain atau hasil kueri berdasarkan bidang yang cocok.

Gunakan `join` perintah untuk mengkorelasikan peristiwa log terkait di berbagai sumber seperti grup log menggunakan kunci yang umum di seluruh mereka seperti pencocokan pengidentifikasi permintaan atau transaksi. IDs

**Sintaks**  


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

**Parameter**  

+ `<right_log_group>`— Sumber data sekunder untuk bergabung dengan.
+ `<left_alias>`dan `<right_alias>` — Alias untuk membedakan bidang dari sumber data kiri (primer) dan kanan (sekunder).
+ `where <field>`- Menentukan bidang yang digunakan sebagai kunci bergabung. Bidang harus ada di kedua sumber data.
+ `type=<join_type>`(opsional) - Menentukan jenis bergabung. Nilai yang valid adalah:
  + `inner`(default) - Mengembalikan hanya catatan yang cocok
  + `left`— Mengembalikan semua catatan dari sumber data primer dan catatan yang cocok dari sumber data sekunder

**Contoh**  


**Example Contoh 1: Korelasikan permintaan API Gateway dengan log eksekusi Lambda**  
Contoh ini menunjukkan cara menggabungkan log akses API Gateway dengan log fungsi Lambda untuk menghubungkan permintaan yang masuk dengan pemrosesan backend mereka. Ini berguna untuk memecahkan masalah alur end-to-end permintaan dan mengidentifikasi pemanggilan Lambda mana yang sesuai dengan permintaan API tertentu.  

```
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
```
Kueri ini:  

1. Kueri API Gateway akses log dan filter untuk kesalahan server (status> = 500)

1. Bergabung dengan log fungsi Lambda menggunakan bidang `requestId` yang muncul di kedua sumber log

1. Menggunakan alias (`api`dan`lambda`) untuk membedakan bidang dari setiap sumber

1. Mengembalikan informasi gabungan yang menunjukkan latensi API bersama durasi eksekusi Lambda dan penggunaan memori

1. Mengurutkan hasil berdasarkan latensi API untuk mengidentifikasi permintaan paling lambat

**Example Contoh 2: Lacak transaksi terdistribusi di seluruh layanan mikro**  
Saat men-debug masalah dalam arsitektur layanan mikro, Anda sering perlu melacak transaksi di beberapa layanan. Contoh ini menunjukkan cara menggabungkan log dari dua layanan berbeda menggunakan ID transaksi umum.  

```
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)
```
Kueri ini:  

1. Dimulai dengan acara pembuatan pesanan dari layanan pesanan

1. Menggunakan a `left join` untuk memasukkan semua pesanan, bahkan yang tidak memiliki catatan pembayaran yang cocok

1. Bergabung dengan acara pemrosesan pembayaran menggunakan bidang bersama `transactionId`

1. Memfilter hasil akhir untuk hanya menampilkan pesanan dengan pembayaran gagal atau catatan pembayaran yang hilang
Gabungan kiri penting di sini karena memastikan Anda melihat pesanan yang dibuat tetapi tidak pernah memiliki acara pembayaran yang sesuai, yang dapat menunjukkan kegagalan sistem.

**Perilaku**  

+ Sumber data primer (sisi kiri) diproses terlebih dahulu.
+ Sumber data sekunder dievaluasi dan dicocokkan menggunakan kunci gabungan yang ditentukan.
+ Pencocokan dilakukan dengan menggunakan perbandingan kesetaraan di bidang gabungan.
+ Untuk gabungan kiri, catatan tak tertandingi dari sumber data primer dipertahankan dengan nilai nol untuk bidang sekunder.

**Catatan dan batasan**  

+ Hanya kondisi kesetaraan (=) yang didukung.
+ Hanya satu perintah join yang didukung per kueri.
+ Kunci gabungan harus ada di kedua sumber data dan tipe yang kompatibel.
+ Kueri yang menggunakan join dapat memindai lebih banyak data dan menimbulkan biaya lebih tinggi.
+ Jumlah nilai kunci unik dalam sumber data sekunder dibatasi hingga 50.000 untuk memastikan kinerja kueri.
+ Subquery di sisi kanan join tidak didukung.

**Perintah-perintah terkait**  

+ [bidang](CWL_QuerySyntax-Fields.md)
+ [menyaring](CWL_QuerySyntax-Filter.md)
+ [mengurai](CWL_QuerySyntax-Parse.md)
+ [statistik](CWL_QuerySyntax-Stats.md)
+ [mengurutkan](CWL_QuerySyntax-Sort.md)
+ [batasi](CWL_QuerySyntax-Limit.md)