gabungan innerunique

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 mengacuhkan rekaman jejak duplikat yang berkontribusi pada korelasi.

Diagram yang memperlihatkan cara kerja gabungan.

Sintaks

LeftTable|joinkind=innerunique Aku tidak bisa melakukan ini. RightTableonKondisi

Pelajari selengkapnya tentang konvensi sintaksis.

Parameter

Nama Jenis Diperlukan 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 bentukNilaiNama= 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 ONColumnName. 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 shuffle
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 yang dideduplikasi dari tabel kiri yang cocok dengan baris dari tabel kanan.

Contoh

Menggunakan gabungan innerunique default

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

Output

Kunci Nilai1 Kunci1 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:

Kunci 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

Output

kunci nilai 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

Output

kunci nilai 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"

Output

kunci nilai 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