innerunique illesztés
A következőkre vonatkozik: ✅Microsoft Fabric✅Azure Data Explorer✅Azure Monitor✅Microsoft Sentinel
Az innerunique
illesztésű íz eltávolítja a duplikált kulcsokat a bal oldalról. Ez a viselkedés biztosítja, hogy a kimenet egy sort tartalmaz az egyedi bal és jobb kulcsok minden kombinációjához.
Alapértelmezés szerint az innerunique
illesztés ízét használja a rendszer, ha nincs megadva a kind
paraméter. Ez az alapértelmezett implementáció a napló-/nyomkövetés-elemzési forgatókönyvekben hasznos, ahol két eseményt szeretne korrelálni egy megosztott korrelációs azonosító alapján. Lehetővé teszi a jelenség összes előfordulásának lekérését, miközben figyelmen kívül hagyja az ismétlődő nyomkövetési rekordokat, amelyek hozzájárulnak a korrelációhoz.
Szintaxis
LeftTable|
join
kind=innerunique
[ Tippek ] RightTableon
Feltételek
További információ szintaxiskonvenciákról.
Paraméterek
Név | Típus | Szükséges | Leírás |
---|---|---|---|
LeftTable | string |
✔️ | A bal oldali táblázat vagy táblázatos kifejezés, más néven külső tábla, amelynek sorait egyesíteni kell.
$left jelölése. |
tippek | string |
Nulla vagy több térelválasztó illesztési tipp Név= Érték formájában, amelyek szabályozzák a soregyeztetési művelet és a végrehajtási terv viselkedését. További információ: Tippek. |
|
RightTable | string |
✔️ | A jobb oldali táblázat vagy táblázatos kifejezés, más néven belső táblázat, amelynek sorait egyesíteni kell.
$right jelölése. |
feltételek | string |
✔️ | Meghatározza, hogy LeftTable sorai hogyan egyeznek RightTablesoraival. Ha az egyeztetni kívánt oszlopok neve mindkét táblában azonos, használja a ON ColumnNameszintaxist. Ellenkező esetben használja a LeftColumn== $right. RightColumnszintaxist ON $left. . Több feltétel megadásához használhatja az "and" kulcsszót, vagy vesszővel elválaszthatja őket. Ha vesszőt használ, a feltételek kiértékelése az "és" logikai operátor használatával történik. |
Borravaló
A legjobb teljesítmény érdekében, ha az egyik tábla mindig kisebb, mint a másik, használja az illesztés bal oldalán.
Tippeket
Paraméterek neve | Értékrend | Leírás |
---|---|---|
hint.remote |
auto , left , local , right |
Lásd: fürtközi csatlakozás |
hint.strategy=broadcast |
Megadja, hogyan oszthatja meg a lekérdezési terhelést a fürtcsomópontokon. | Lásd: közvetítési csatlakozás |
hint.shufflekey=<key> |
A shufflekey lekérdezés megosztja a fürtcsomópontok lekérdezési terhelését egy kulcs használatával az adatok particionálásához. |
Lásd elosztási lekérdezés |
hint.strategy=shuffle |
A shuffle stratégiai lekérdezés megosztja a fürtcsomópontok lekérdezési terhelését, ahol minden csomópont feldolgozza az adatok egy partícióját. |
Lásd elosztási lekérdezés |
Visszatér
séma: Mindkét tábla összes oszlopa, beleértve a megfelelő kulcsokat is.
Sorok: A bal oldali táblából származó összes deduplikált sor, amely megfelel a jobb oldali táblázat sorainak.
Példák
Tekintse át a példákat, és futtassa őket az Adatkezelő lekérdezési lapján.
Az alapértelmezett innerunique illesztés használata
A példalekérdezés egyesíti az X és az Y táblából származó sorokat, ahol a kulcsok egyeznek, és csak a mindkét táblában lévő sorokat jeleníti meg
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
kimeneti
Kulcs | Érték1 | 1. kulcs | Érték2 |
---|---|---|---|
b | 2 | b | 10 |
c | 4 | c | 20 |
c | 4 | c | 30 |
Jegyzet
Az "a" és a "d" kulcsok nem jelennek meg a kimenetben, mivel a bal és a jobb oldalon sem volt egyező kulcs.
A lekérdezés végrehajtotta az alapértelmezett illesztést, amely egy belső illesztés, miután deduplikálta a bal oldalt az illesztési kulcs alapján. A deduplikáció csak az első rekordot tartja meg. Az illesztés eredményül kapott bal oldala a deduplikáció után a következő:
Kulcs | Érték1 |
---|---|
egy | 1 |
b | 2 |
c | 4 |
Két lehetséges kimenet az innerunique illesztésből
Jegyzet
A innerunique
illesztés íze két lehetséges kimenetet eredményezhet, és mindkettő helyes.
Az első kimenetben az illesztés operátora véletlenszerűen kiválasztotta a t1-ben megjelenő első kulcsot az "val1.1" értékkel, és t2 billentyűvel egyeztette.
A második kimenetben az illesztés operátora véletlenszerűen kiválasztotta a t1-ben megjelenő második kulcsot az "val1.2" értékkel, és megfelelteti a t2 kulcsnak.
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
kimeneti
kulcs | érték | key1 | érték1 |
---|---|---|---|
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
kimeneti
kulcs | érték | key1 | érték1 |
---|---|---|---|
1 | val1.2 | 1 | val1.3 |
1 | val1.2 | 1 | val1.4 |
- A Kusto a
join
után érkező szűrők leküldésére van optimalizálva, lehetőség szerint a megfelelő illesztőoldalra, balra vagy jobbra. - Néha a használt íz innerunique, és a szűrő propagálása az illesztés bal oldalára történik. A rendszer automatikusan propagálja az ízt, és a szűrőre vonatkozó kulcsok megjelennek a kimenetben.
- Használja az előző példát, és adjon hozzá egy szűrőt
where value == "val1.2"
. A második eredményt adja, és soha nem adja meg az adathalmazok első eredményét:
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"
kimeneti
kulcs | érték | key1 | érték1 |
---|---|---|---|
1 | val1.2 | 1 | val1.3 |
1 | val1.2 | 1 | val1.4 |
Kiterjesztett bejelentkezési tevékenységek lekérése
Olyan kiterjesztett tevékenységek lekérése egy login
, amelyet egyes bejegyzések egy tevékenység kezdeteként és végének jelölnek.
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
Kapcsolódó tartalom
- További információ az illesztés ízeiről