join işleci

Her tablodaki belirtilen sütunların değerlerini eşleştirerek yeni bir tablo oluşturmak için iki tablonun satırlarını birleştirin.

Table1 | join (Table2) on CommonColumn, $left.Col1 == $right.Col2

Syntax

LeftTablejoin [join] (()on)

Bağımsız değişkenler

  • LeftTable: Satırları birleştirilecek olan dış tablo olarak da adlandırılan sol tablo veya tablo ifadesi. olarak ifade edildi $left.

  • RightTable: Satırları birleştirilecek olan iç tablo olarak da adlandırılan doğru tablo veya tablo ifadesi. olarak ifade edildi $right.

  • Öznitelikler: LeftTable'dan satırların RightTable'dan satırlara nasıl eş olduğunu açıklayan bir veya daha fazla virgülle ayrılmış kural. Mantıksal işleç kullanılarak birden çok kural and değerlendirilir.

    Bir kural şu kurallardan biri olabilir:

    Kural tür Syntax Yüklemi
    Ad ile eşitlik Columnname wherewhere. ColumnnameRightTable. Columnname
    Değere göre eşitlik $left.$left.==$right.== where$left.where==$right.$left.

    Not

    'Değere göre eşitlik' için sütun adlarının ve notlarının yer alan ilgili sahip tablosuyla uygun olması $right gerekir.

  • JoinParameters: Satır eşleşmesi işlemi ve yürütme planının davranışını kontrol altına alan NameValue şeklinde sıfır veya daha fazla boşlukla ayrılmış parametre. Aşağıdaki parametreler de destekleni:

    Parametre adı Değerler Açıklama
    kind Birleşim aromaları Bkz . Birleştirme Aromaları
    hint.remote auto, left, local, right Bkz . Kümeler Arası Birleştirme
    hint.strategy=broadcast Küme düğümlerde sorgu yükünü paylaşmanın yolunu belirtir. Bkz . yayına katılma
    hint.shufflekey=<key> Sorgu shufflekey , verileri bölümleme anahtarı kullanarak küme düğümleri üzerindeki sorgu yükünü paylaşıyor. Bkz . karıştırma sorgusu
    hint.strategy=shuffle Strateji shuffle sorgusu, her düğümün verilerin bir bölümünü işleyeceğiz küme düğümleri üzerindeki sorgu yükünü paylaşıyor. Bkz . karıştırma sorgusu
    Name Değerler Açıklama
    kind Birleşim aromaları Bkz . Birleştirme Aromaları
    hint.remote auto, left, local, right
    hint.strategy=broadcast Küme düğümlerde sorgu yükünü paylaşmanın yolunu belirtir. Bkz . yayına katılma
    hint.shufflekey=<key> Sorgu shufflekey , verileri bölümleme anahtarı kullanarak küme düğümleri üzerindeki sorgu yükünü paylaşıyor. Bkz . karıştırma sorgusu
    hint.strategy=shuffle Strateji shuffle sorgusu, her düğümün verilerin bir bölümünü işleyeceğiz küme düğümleri üzerindeki sorgu yükünü paylaşıyor. Bkz . karıştırma sorgusu

Uyarı

Belirtilmezse kind , varsayılan birleştirme aroması olur innerunique. Bu, varsayılan aromaya sahip olan diğer analiz inner ürünlerinden farklıdır. Farkları anlamak ve sorgunun amaçlanan sonuçları elde etmek için birleştirme aromalarına bakın.

Döndürülenler

Çıkış şeması, birleştirme türüne bağlıdır:

Birleştirme aroması Çıkış şeması
kind=leftanti, kind=leftsemi Sonuç tablosu yalnızca sol taraftan sütunlar içerir.
kind=rightanti, kind=rightsemi Sonuç tablosu yalnızca sağ taraftan sütunlar içerir.
kind=innerunique, kind=inner, kind=leftouter, kind=rightouter, kind=fullouter Eşleşen anahtarlar da dahil olmak üzere iki t tablodaki her sütun için bir sütun. Adla ilgili bir sorun olursa sağ tarafındaki sütunlar otomatik olarak yeniden adlandırılır.

Çıkış kayıtları birleştirme türüne bağlıdır:

Not

Bu alanlar için aynı değerlere sahip birkaç satır varsa, tüm birleşimler için satırlar elde edersiniz. Eşleşme, bir tablodan seçilen ve diğer tablodaki tüm alanlar için on aynı değere sahip olan bir satırdır.

Birleştirme aroması Çıkış kayıtları
kind=leftanti, kind=leftantisemi Sol taraftan sağ tarafta eşleşmesi olan tüm kayıtları döndürür
kind=rightanti, kind=rightantisemi Sol taraftan eşleşmesi olan sağ taraftan tüm kayıtları döndürür.
kind Belirtilme -miş kind=innerunique Anahtarın her değeri için sol taraftan yalnızca bir satır eştir on . Çıkış, bu satırın her eşleşmesi için sağdan satır içeren bir satır içerir.
kind=leftsemi Sol taraftan sağ tarafta eşleşen tüm kayıtları döndürür.
kind=rightsemi Sol taraftan eşleşen sağ taraftan tüm kayıtları döndürür.
kind=inner Sol ve sağ kenarlardan eşleşen tüm kayıtları döndürür.
kind=fullouter Sol ve sağ kenarlarından tüm kayıtların tüm kayıtlarını döndürür. Eşleşmeyen hücreler null değerler içerir.
kind=leftouter Sol taraftan tüm kayıtları ve yalnızca sağ taraftan eşleşen kayıtları döndürür.
kind=rightouter Sağ taraftan tüm kayıtları ve yalnızca sol taraftan eşleşen kayıtları döndürür.

İpucu

En iyi performans için, bir tablo her zaman diğer tablodan küçükse, birleştirmenin sol (kanallı) tarafı olarak kullanın.

Örnek

Bazı girdilerin etkinliğin başlangıcı login ve sonu olarak işaret eden genişletilmiş etkinlikleri bir'den al.

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

Birleşim aromaları

Join işlecinin tam aroması kind anahtar sözcüğüyle belirtilir. Birleştirme işlecinin aşağıdaki çeşitler de destekleni:

Tür/aromayı birleştirme Description
innerunique (veya varsayılan olarak boş) Sol tarafta tekrarlama ile iç birleşim
inner Standart iç birleşim
leftouter Sol dış birleştirme
rightouter Sağ dış birleştirme
fullouter Tam dış birleştirme
leftanti, antiveya leftantisemi Sol ters birleştirme
rightanti veya rightantisemi Sağ ters birleştirme
leftsemi Sol yarı birleşim
rightsemi Sağ yarı ekleme

Varsayılan JOIN türü

Varsayılan birleşim, sol taraftaki yinelenenleri kaldırma ile bir iç birleşimdir. Varsayılan JOIN uygulama, her biri aynı bağıntı KIMLIĞI altında olan her filtreleme ölçütüyle eşleşen iki olayı ilişkilendirmek istediğiniz tipik günlük/izleme çözümleme senaryolarında faydalıdır. Phenomenon 'un tüm görünümlerini geri almak ve katkıda bulunan izleme kayıtlarının birden çok görünümünü yoksaymak istiyorsunuz.

X | join Y on Key
 
X | join kind=innerunique Y on Key

Aşağıdaki iki örnek tablo, birleştirmenin işlemini açıklamak için kullanılır.

Tablo X

Anahtar Value1
a 1
b 2
b 3
c 4

Tablo Y

Anahtar Value2
b 10
c 20
c 30
d 40

Varsayılan birleşim, birleşim anahtarındaki sol tarafı çoğaltdıktan sonra bir iç birleşim yapar (yinelenenleri kaldırma ilk kaydı korur).

Bu bildirimde verilen: X | join Y on Key

birleştirmenin etkin sol tarafı, yinelenenleri kaldırma işleminden sonra tablo X şöyle olacaktır:

Anahtar Value1
a 1
b 2
c 4

ve birleştirmenin sonucu şöyle olacaktır:

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
Anahtar Value1 KEY1 Value2
b 2 b 10
c 4 c 20
c 4 c 30

Not

Hem sol hem de sağ tarafta eşleşen bir anahtar olmadığından, çıktıda ' a ' ve ' a ' anahtarları görünmüyor.

İç birleşim türü

iç birleşim işlevi, SQL dünyadan standart iç birleşim gibidir. Sol taraftaki bir kayıt, sağ taraftaki kayıtla aynı JOIN anahtarına sahip olduğunda bir çıkış kaydı oluşturulur.

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 kind=inner Y on Key
Anahtar Value1 KEY1 Value2
b 3 b 10
b 2 b 10
c 4 c 20
c 4 c 30

Not

  • sağ taraftaki (b, 10), sol tarafta iki kez birleştirildi: (b, 2) ve (b, 3).
  • (c, 4) sol tarafta iki kez birleştirildi: sağdaki (c, 20) ve (c, 30).

Innerunique-JOIN türü

Sol taraftaki anahtarları yinelenenleri kaldırma için ınnerunique-JOIN özelliğini kullanın. Sonuç, yinelenenleri kaldırılmış sol anahtarların ve sağ anahtarların her birleşiminin çıktısındaki bir satır olacaktır.

Not

ınnerunique Flavor iki olası çıkış ve her ikisi de doğru olabilir. İlk çıktıda, JOIN işleci "Val 1.1" değeriyle ve bunu T2 ile eşleştirildiği T1 'da görünen ilk anahtarı rastgele olarak seçti. İkinci çıktıda, JOIN işleci "Val 1.2" değeriyle ve bunu T2 ile eşleştirildiği şekilde T1 'da görünen ikinci anahtarı rastgele seçti.

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
anahtar değer key1 value1
1 Val 1.1 1 değer 1.3
1 Val 1.1 1 Val 1.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
anahtar değer key1 value1
1 değer 1.2 1 değer 1.3
1 değer 1.2 1 Val 1.4
  • Kusto, mümkün olduğunda, doğru bir JOIN tarafına, sola veya sağa doğru bir şekilde gelen join filtreleri göndermek için en iyi duruma getirilmiştir.

  • Bazen kullanılan Flavor innerunique , filtre ise birleştirmenin sol tarafına yayılır. Özellik otomatik olarak yayılır ve bu filtreye uygulanan anahtarlar her zaman çıktıda görüntülenir.

  • Yukarıdaki örneği kullanın ve bir filtre where value == "val1.2" ekleyin. Her zaman ikinci sonuca sahiptir ve veri kümelerinin ilk sonucunu hiçbir zaman vermeymez:

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"
anahtar değer key1 value1
1 değer 1.2 1 değer 1.3
1 değer 1.2 1 Val 1.4

Sol dış birleşim türü

X ve Y tabloları için bir sol dış birleştirmenin sonucu her zaman sol tablonun (X) tüm kayıtlarını içerir, bu da birleşim koşulu doğru tabloda (Y) eşleşen bir kayıt bulmasa bile.

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 kind=leftouter Y on Key
Anahtar Value1 KEY1 Value2
a 1
b 2 b 10
b 3 b 10
c 4 c 20
c 4 c 30

Sağ dış birleşim türü

Sağ dış birleşim, sol dış birleşime benzer ancak tablo işleme tersine çevrilir.

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 kind=rightouter Y on Key
Anahtar Value1 KEY1 Value2
b 2 b 10
b 3 b 10
c 4 c 20
c 4 c 30
d 40

Tam dış birleşim türü

Tam dış birleşim, hem sol hem de sağ dış birleşimler uygulamanın etkisini birleştirir. Birleştirilen tablolardaki kayıtlar eşleşmediğinden, sonuç kümesinde eşleşen bir satır olmayan tablonun her sütunu için değerler olacaktır null . Eşleşen kayıtlar için, her iki tablodan doldurulmuş alanları içeren sonuç kümesinde tek bir satır oluşturulur.

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 kind=fullouter Y on Key
Anahtar Value1 KEY1 Value2
a 1
b 2 b 10
b 3 b 10
c 4 c 20
c 4 c 30
d 40

Sol birleşimden koruma aroması

Sol anti-join, sol taraftan sağ taraftan hiçbir kayıtla eşleşmeden tüm kayıtları döndürür.

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 kind=leftanti Y on Key
Anahtar Değer1
a 1

Not

Birleştirmeye karşı koruma, "NOT IN" sorgusunu modeller.

Sağ birleşimden koruma aroması

Sağ birleşimden koruma, sağ taraftan sol taraftan hiçbir kayıtla eşleşmeden tüm kayıtları döndürür.

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 kind=rightanti Y on Key
Anahtar Değer2
d 40

Not

Birleştirmeye karşı koruma, "NOT IN" sorgusunu modeller.

Sol yarı birleşim aroması

Sol yarı birleştirme, sol taraftan sağ taraftan bir kayıtla eşan tüm kayıtları döndürür. Yalnızca sol taraftan sütunlar döndürülür.

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 kind=leftsemi Y on Key
Anahtar Değer1
b 2
b 3
c 4

Sağ yarı birleşim aroması

Sağ noktalı birleşim, sağ taraftan sol taraftan bir kayıtla eşan tüm kayıtları döndürür. Yalnızca sağ taraftan sütunlar döndürülür.

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 kind=rightsemi Y on Key
Anahtar Değer2
b 10
c 20
c 30

Çapraz birleştirme

Kusto yerel olarak çapraz birleşim aroması sağlamaz. işleci ile işaretleyesiniz kind=cross. Simülasyon yapmak için sahte bir anahtar kullanın.

X | extend dummy=1 | join kind=inner (Y | extend dummy=1) on dummy

Birleştirme ipuçları

işleci join , bir sorgunun nasıl çalıştırılır denetlemesi için bir dizi ipucunu destekler. Bu ipuçları, semantiği değiştirmez join, ancak performansını etkileyebilir.

Birleştirme ipuçları aşağıdaki makalelerde açıklanmıştır:

  • hint.shufflekey=<key> ve hint.strategy=shuffle - hint.shufflekey=<key>
  • hint.strategy=broadcast - hint.strategy=broadcast
  • hint.remote=<strategy> - hint.remote=<strategy>