gabungan innerunique
Berlaku untuk: ✅Microsoft Fabric✅✅
Rasa innerunique
gabungan menghapus kunci duplikat dari sisi kiri. Perilaku ini memastikan bahwa output berisi baris untuk setiap kombinasi tombol kiri dan kanan yang unik.
Secara default, innerunique
ragam gabungan digunakan jika kind
parameter tidak ditentukan. Implementasi default ini berguna dalam skenario analisis log/pelacakan, di mana Anda bertujuan untuk menghubungkan dua peristiwa berdasarkan ID korelasi bersama. Ini memungkinkan Anda untuk mengambil semua instans fenomena sambil mengabaikan catatan jejak duplikat yang berkontribusi pada korelasi.
Sintaks
LeftTable|
join
kind=innerunique
[ Petunjuk ] Kondisi RightTableon
Pelajari selengkapnya tentang konvensi sintaksis.
Parameter
Nama | Tipe | Wajib | Deskripsi |
---|---|---|---|
LeftTable | string |
✔️ | Tabel kiri atau ekspresi tabular, terkadang disebut tabel luar, yang barisnya akan digabungkan. Dilambangkan sebagai $left . |
Petunjuk | string |
Nol atau lebih petunjuk gabungan yang dipisahkan spasi dalam bentuk Nilai Nama= yang mengontrol perilaku operasi pencocokan baris dan rencana eksekusi. Untuk informasi selengkapnya, lihat Petunjuk. |
|
RightTable | string |
✔️ | Tabel kanan atau ekspresi tabular, terkadang disebut tabel dalam, yang barisnya akan digabungkan. Dilambangkan sebagai $right . |
Kondisi | string |
✔️ | Menentukan bagaimana baris dari LeftTable dicocokkan dengan baris dari RightTable. Jika kolom yang ingin Anda cocokkan memiliki nama yang sama di kedua tabel, gunakan sintaks ON ColumnName. Jika tidak, gunakan sintaks ON $left. LeftColumn== $right. RightColumn. Untuk menentukan beberapa kondisi, Anda dapat menggunakan kata kunci "dan" atau memisahkannya dengan koma. Jika Anda menggunakan koma, kondisi dievaluasi menggunakan operator logis "dan". |
Tip
Untuk performa terbaik, jika satu tabel selalu lebih kecil dari tabel lainnya, gunakan sebagai sisi kiri gabungan.
Petunjuk
Nama parameter | Nilai | Deskripsi |
---|---|---|
hint.remote |
auto , , left local ,right |
Lihat Gabungan Lintas Kluster |
hint.strategy=broadcast |
Menentukan cara berbagi beban kueri pada node kluster. | Lihat gabungan siaran |
hint.shufflekey=<key> |
Kueri shufflekey membagikan muatan kueri pada node kluster, menggunakan kunci ke data partisi. |
Lihat kueri acak |
hint.strategy=shuffle |
Kueri shuffle strategi berbagi beban kueri pada node kluster, di mana setiap simpul memproses satu partisi data. |
Lihat kueri acak |
Mengembalikan
Skema: Semua kolom dari kedua tabel, termasuk kunci yang cocok.
Baris: Semua baris deduplikasi dari tabel kiri yang cocok dengan baris dari tabel kanan.
Contoh
Tinjau contoh dan jalankan di halaman kueri Data Explorer Anda.
Menggunakan gabungan innerunique default
Contoh kueri menggabungkan baris dari tabel X dan Y tempat kunci cocok, hanya memperlihatkan baris yang ada di kedua tabel
let X = datatable(Key:string, Value1:long)
[
'a',1,
'b',2,
'b',3,
'c',4
];
let Y = datatable(Key:string, Value2:long)
[
'b',10,
'c',20,
'c',30,
'd',40
];
X | join Y on Key
Hasil
Tombol | Nilai1 | Key1 | Nilai2 |
---|---|---|---|
b | 2 | b | 10 |
c | 4 | c | 20 |
c | 4 | c | 30 |
Catatan
Kunci 'a' dan 'd' tidak muncul dalam output, karena tidak ada kunci yang cocok di sisi kiri dan kanan.
Kueri menjalankan gabungan default, yang merupakan gabungan dalam setelah mendeduplikasi sisi kiri berdasarkan kunci gabungan. Deduplikasi hanya menyimpan rekaman pertama. Sisi kiri gabungan yang dihasilkan setelah deduplikasi adalah:
Tombol | Nilai1 |
---|---|
a | 1 |
b | 2 |
c | 4 |
Dua kemungkinan output dari gabungan innerunique
Catatan
Rasa innerunique
gabungan dapat menghasilkan dua kemungkinan output dan keduanya benar.
Pada output pertama, operator gabungan secara acak memilih kunci pertama yang muncul di t1, dengan nilai "val1.1" dan mencocokkannya dengan tombol t2.
Pada output kedua, operator gabungan secara acak memilih kunci kedua yang muncul di t1, dengan nilai "val1.2" dan mencocokkannya dengan tombol t2.
let t1 = datatable(key: long, value: string)
[
1, "val1.1",
1, "val1.2"
];
let t2 = datatable(key: long, value: string)
[
1, "val1.3",
1, "val1.4"
];
t1
| join kind = innerunique
t2
on key
Hasil
kunci | value | key1 | value1 |
---|---|---|---|
1 | val1.1 | 1 | val1.3 |
1 | val1.1 | 1 | val1.4 |
let t1 = datatable(key: long, value: string)
[
1, "val1.1",
1, "val1.2"
];
let t2 = datatable(key: long, value: string)
[
1, "val1.3",
1, "val1.4"
];
t1
| join kind = innerunique
t2
on key
Hasil
kunci | value | key1 | value1 |
---|---|---|---|
1 | val1.2 | 1 | val1.3 |
1 | val1.2 | 1 | val1.4 |
- Kusto dioptimalkan untuk mendorong filter yang datang setelah
join
, menuju sisi gabungan yang sesuai, kiri atau kanan, bila memungkinkan. - Terkadang, rasa yang digunakan adalah innerunique dan filter diperbanyak ke sisi kiri gabung. Rasa secara otomatis disebarluaskan dan kunci yang berlaku untuk filter tersebut muncul dalam output.
- Gunakan contoh sebelumnya dan tambahkan filter
where value == "val1.2"
. Ini memberikan hasil kedua dan tidak akan pernah memberikan hasil pertama untuk himpunan data:
let t1 = datatable(key: long, value: string)
[
1, "val1.1",
1, "val1.2"
];
let t2 = datatable(key: long, value: string)
[
1, "val1.3",
1, "val1.4"
];
t1
| join kind = innerunique
t2
on key
| where value == "val1.2"
Hasil
kunci | value | key1 | value1 |
---|---|---|---|
1 | val1.2 | 1 | val1.3 |
1 | val1.2 | 1 | val1.4 |
Mendapatkan aktivitas masuk yang diperluas
Dapatkan aktivitas diperpanjang dari login
bahwa berapa entri ditandai sebagai awal dan akhir aktivitas.
let Events = MyLogTable | where type=="Event" ;
Events
| where Name == "Start"
| project Name, City, ActivityId, StartTime=timestamp
| join (Events
| where Name == "Stop"
| project StopTime=timestamp, ActivityId)
on ActivityId
| project City, ActivityId, StartTime, StopTime, Duration = StopTime - StartTime
let Events = MyLogTable | where type=="Event" ;
Events
| where Name == "Start"
| project Name, City, ActivityIdLeft = ActivityId, StartTime=timestamp
| join (Events
| where Name == "Stop"
| project StopTime=timestamp, ActivityIdRight = ActivityId)
on $left.ActivityIdLeft == $right.ActivityIdRight
| project City, ActivityId, StartTime, StopTime, Duration = StopTime - StartTime