Megosztás a következőn keresztül:


innerunique illesztés

A következőkre vonatkozik: ✅Microsoft FabricAzure Data ExplorerAzure MonitorMicrosoft 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.

diagram, amely bemutatja az illesztés működését.

Szintaxis

LeftTable|joinkind=innerunique [ Tippek ] RightTableonFelté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. $leftjelö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. $rightjelö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 ONColumnNameszintaxist. 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 joinutá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