Sdílet prostřednictvím


innerunique join

Platí pro: ✅Microsoft FabricAzure Data Explorer✅Azure MonitorMicrosoft Sentinel

Příchuť innerunique spojení odebere z levé strany duplicitní klíče. Toto chování zajišťuje, že výstup obsahuje řádek pro každou kombinaci jedinečných kláves vlevo a vpravo.

Ve výchozím nastavení se použije příchuť spojení, innerunique pokud kind parametr není zadaný. Tato výchozí implementace je užitečná ve scénářích analýzy protokolů a trasování, kde chcete korelovat dvě události na základě sdíleného ID korelace. Umožňuje načíst všechny instance jevu a ignorovat duplicitní záznamy trasování, které přispívají k korelaci.

Diagram znázorňující, jak spojení funguje

Syntaxe

LeftTable | join kind=innerunique [ Rady ] Podmínky pravé tabulky on

Přečtěte si další informace o konvencích syntaxe.

Parametry

Název Type Požadováno Popis
Levá tabulka string ✔️ Levá tabulka nebo tabulkový výraz, někdy označovaný jako vnější tabulka, jejíž řádky se mají sloučit. Označeno jako $left.
Rady string Nápovědy k nulovému nebo více mezerami oddělenému spojení ve formě hodnoty názvu = , která řídí chování operace shody řádků a plánu provádění. Další informace naleznete v tématu Nápovědy.
RightTable string ✔️ Pravá tabulka nebo tabulkový výraz, někdy označovaný jako vnitřní tabulka, jejíž řádky se mají sloučit. Označeno jako $right.
Podmínky string ✔️ Určuje, jak se řádky z tabulky LeftTable shodují s řádky z tabulky RightTable. Pokud sloupce, které chcete shodovat, mají v obou tabulkách stejný název, použijte syntaxi ON ColumnName. Jinak použijte syntaxi ON $left.LeftColumn $right.==RightColumn RightColumn. Pokud chcete zadat více podmínek, můžete použít klíčové slovo "a" nebo je oddělit čárkami. Pokud použijete čárky, podmínky se vyhodnocují pomocí logického operátoru "a".

Tip

Nejlepšího výkonu dosáhnete, pokud je jedna tabulka vždy menší než druhá, použijte ji jako levou stranu spojení.

Tipy

Název parametrů Hodnoty Popis
hint.remote auto, left, , localright Viz připojení mezi clustery
hint.strategy=broadcast Určuje způsob sdílení zatížení dotazu na uzly clusteru. Viz připojení k všesměru
hint.shufflekey=<key> Dotaz shufflekey sdílí zatížení dotazu na uzly clusteru pomocí klíče pro dělení dat. Zobrazit dotaz náhodného prohazování
hint.strategy=shuffle shuffle Dotaz strategie sdílí zatížení dotazů na uzly clusteru, kde každý uzel zpracovává jeden oddíl dat. Zobrazit dotaz náhodného prohazování

Návraty

Schéma: Všechny sloupce z obou tabulek, včetně odpovídajících klíčů.
Řádky: Všechny řádky odstraněné duplicitními daty z levé tabulky, které odpovídají řádkům z pravé tabulky.

Příklady

Použití výchozího spojení 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

Výstup

Klíč Hodnota1 Klíč1 Hodnota2
b 2 b 10
c 4 c 20
c 4 c 30

Poznámka:

Ve výstupu se nezobrazují klíče "a" a "d", protože na levé i pravé straně nebyly žádné odpovídající klíče.

Dotaz spustil výchozí spojení, což je vnitřní spojení po odstranění duplicit na levé straně na základě klíče spojení. Odstranění duplicitních dat uchovává pouze první záznam. Výsledná levá strana spojení po odstranění duplicit je:

Klíč Hodnota1
d 0
b 2
c 4

Dva možné výstupy z vnitřního spojení

Poznámka:

Příchuť innerunique spojení může přinést dva možné výstupy a oba jsou správné. V prvním výstupu operátor spojení náhodně vybral první klíč, který se zobrazí v t1, s hodnotou "val1.1" a spároval ho s klíči t2. Ve druhém výstupu operátor spojení náhodně vybral druhý klíč, který se zobrazí v t1, s hodnotou "val1.2" a spároval ho s klíči t2.

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

Výstup

key hodnota key1 hodnota1
0 val1.1 0 val1.3
0 val1.1 0 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

Výstup

key hodnota key1 hodnota1
0 val1.2 0 val1.3
0 val1.2 0 val1.4
  • Kusto je optimalizovaný pro nabízení filtrů, které přicházejí za join, směrem k příslušné straně spojení, vlevo nebo vpravo, pokud je to možné.
  • Někdy je použitá příchuť vnitřní a filtr se rozšíří na levou stranu spojení. Příchuť se automaticky rozšíří a klíče, které se vztahují na tento filtr, se zobrazí ve výstupu.
  • Použijte předchozí příklad a přidejte filtr where value == "val1.2" . Vrátí druhý výsledek a nikdy neudělí první výsledek datových sad:
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"

Výstup

key hodnota key1 hodnota1
0 val1.2 0 val1.3
0 val1.2 0 val1.4

Získání rozšířených aktivit přihlašování

Získejte rozšířené aktivity od položky login , které označují jako začátek a konec aktivity.

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