innerunique-koppling

Kopplingssmaken innerunique tar bort dubblettnycklar från vänster sida. Detta säkerställer att utdata innehåller en rad för varje kombination av unika vänster- och högernycklar.

Som standard används kopplingssmaken innerunique om parametern kind inte anges. Den här standardimplementeringen är användbar i log/trace-analysscenarier, där du vill korrelera två händelser baserat på ett delat korrelations-ID. Det gör att du kan hämta alla förekomster av fenomenet samtidigt som du bortser från dubblettspårningsposter som bidrar till korrelationen.

Diagram som visar hur kopplingen fungerar.

Syntax

LeftTable|joinkind=innerunique [ Tips ] RightTableonVillkor

Läs mer om syntaxkonventioner.

Parametrar

Namn Typ Obligatorisk Beskrivning
LeftTable string ✔️ Den vänstra tabellen eller tabelluttrycket, som ibland kallas för den yttre tabellen, vars rader ska sammanfogas. Betecknas som $left.
Tips string Noll eller fler blankstegsavgränsade kopplingstips i form av Namnvärde= som styr beteendet för radmatchningsåtgärden och körningsplanen. Mer information finns i Tips.
RightTable string ✔️ Den högra tabellen eller tabelluttrycket, som ibland kallas den inre tabellen, vars rader ska sammanfogas. Betecknas som $right.
Villkor string ✔️ Avgör hur rader från LeftTable matchas med rader från RightTable. Om de kolumner som du vill matcha har samma namn i båda tabellerna använder du syntaxen ONColumnName. Annars använder du syntaxen ON $left.LeftColumn==$right.RightColumn. Om du vill ange flera villkor kan du antingen använda nyckelordet "och" eller separera dem med kommatecken. Om du använder kommatecken utvärderas villkoren med den logiska operatorn "och".

Tips

För bästa prestanda, om en tabell alltid är mindre än den andra, använder du den som vänster sida av kopplingen.

Tips

Parameternamn Värden Beskrivning
hint.remote auto, left, local, right Se Koppla mellan kluster
hint.strategy=broadcast Anger hur du vill dela frågebelastningen på klusternoder. Se sändningskoppling
hint.shufflekey=<key> Frågan shufflekey delar frågebelastningen på klusternoder med hjälp av en nyckel för att partitioneras data. Se shuffle-fråga
hint.strategy=shuffle Strategifrågan shuffle delar frågebelastningen på klusternoder, där varje nod bearbetar en partition av data. Se shuffle-fråga

Returer

Schema: Alla kolumner från båda tabellerna, inklusive matchande nycklar.
Rader: Alla deduplicerade rader från den vänstra tabellen som matchar rader från den högra tabellen.

Exempel

Använd standardanslutningen innerunique

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

Resultat

Nyckel Värde1 Key1 Värde 2
b 2 b 10
c 4 c 20
c 4 c 30

Anteckning

Nycklarna "a" och "d" visas inte i utdata, eftersom det inte fanns några matchande nycklar på både vänster och höger sida.

Frågan körde standardkopplingen, som är en inre koppling efter deduplicering av vänster sida baserat på kopplingsnyckeln. Dedupliceringen behåller endast den första posten. Den resulterande vänstra sidan av kopplingen efter deduplicering är:

Nyckel Värde1
a 1
b 2
c 4

Två möjliga utdata från innerunique-koppling

Anteckning

Kopplingssmaken innerunique kan ge två möjliga utdata och båda är korrekta. I de första utdatan valde kopplingsoperatorn slumpmässigt den första nyckeln som visas i t1, med värdet "val1.1" och matchade den med t2-nycklar. I den andra utdatan valde kopplingsoperatorn slumpmässigt den andra nyckeln som visas i t1, med värdet "val1.2" och matchade den med t2-nycklar.

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

Resultat

key värde 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

Resultat

key värde key1 value1
1 val1.2 1 val1.3
1 val1.2 1 val1.4
  • Kusto är optimerat för att push-överföra filter som kommer efter join, mot lämplig kopplingssida, vänster eller höger, när det är möjligt.
  • Ibland är den smak som används innerunique och filtret sprids till vänster sida av kopplingen. Smaken sprids automatiskt och de nycklar som gäller för filtret visas i utdata.
  • Använd föregående exempel och lägg till ett filter where value == "val1.2" . Det ger det andra resultatet och ger aldrig det första resultatet för datauppsättningarna:
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"

Resultat

key värde key1 value1
1 val1.2 1 val1.3
1 val1.2 1 val1.4

Hämta utökade inloggningsaktiviteter

Hämta utökade aktiviteter från en login som vissa poster markerar som början och slutet av en aktivitet.

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