innerunique-koppling
Gäller för: ✅Microsoft Fabric✅Azure Data Explorer✅Azure Monitor✅Microsoft Sentinel
Den innerunique
kopplingssmaken tar bort dubblettnycklar från vänster sida. Det här beteendet säkerställer att utdata innehåller en rad för varje kombination av unika vänster- och högernycklar.
Som standard används innerunique
kopplingssmaken om parametern kind
inte har angetts. 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 instanser av fenomenet samtidigt som du bortser från duplicerade spårningsposter som bidrar till korrelationen.
Syntax
LeftTable|
join
kind=innerunique
[ Tips ] RightTableon
Villkor
Läs mer om syntaxkonventioner.
Parametrar
Namn | Typ | Krävs | Beskrivning |
---|---|---|---|
LeftTable | string |
✔️ | Det vänstra tabell- eller tabelluttrycket, som ibland kallas för den yttre tabellen, vars rader ska sammanfogas. Anges som $left . |
tips | string |
Noll eller fler blankstegsavgränsade kopplingstips i form av Name= Value 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 för den inre tabellen, vars rader ska sammanfogas. Anges 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 ON ColumnName. 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 hjälp av den logiska operatorn "och". |
Dricks
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
Namn på parametrar | Värden | Beskrivning |
---|---|---|
hint.remote |
auto , left , local , right |
Se |
hint.strategy=broadcast |
Anger hur du delar frågebelastningen på klusternoder. | Se broadcast join |
hint.shufflekey=<key> |
Den shufflekey frågan delar frågebelastningen på klusternoder med hjälp av en nyckel för att partitioneras data. |
Se shuffle-fråga |
hint.strategy=shuffle |
Den shuffle strategifrågan delar frågebelastningen på klusternoder, där varje nod bearbetar en partition av data. |
Se shuffle-fråga |
Returnerar
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
Granska exemplen och kör dem på datautforskarens frågesida.
Använd standardanslutningen innerunique
Exempelfrågan kombinerar rader från tabellerna X och Y där nycklarna matchar, och visar endast de rader som finns i båda tabellerna
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
utdata
Nyckel | Värde 1 | Key1 | Värde 2 |
---|---|---|---|
b | 2 | b | 10 |
c | 4 | c | 20 |
c | 4 | c | 30 |
Not
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ärde 1 |
---|---|
a | 1 |
b | 2 |
c | 4 |
Två möjliga utdata från innerunique-koppling
Not
Den innerunique
kopplingssmaken 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
utdata
nyckel | 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
utdata
nyckel | värde | key1 | value1 |
---|---|---|---|
1 | val1.2 | 1 | val1.3 |
1 | val1.2 | 1 | val1.4 |
- Kusto är optimerad för att skicka 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 nycklarna 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"
utdata
nyckel | 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
Relaterat innehåll
- Lär dig mer om andra join-smaker