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.
Syntax
LeftTable|
join
kind=innerunique
[ Tips ] RightTableon
Villkor
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 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 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
Relaterat innehåll
- Lär dig mer om andra kopplingssmak
Feedback
https://aka.ms/ContentUserFeedback.
Kommer snart: Under hela 2024 kommer vi att fasa ut GitHub-problem som feedbackmekanism för innehåll och ersätta det med ett nytt feedbacksystem. Mer information finns i:Skicka och visa feedback för