innerunique join
Platí pro: ✅Microsoft Fabric✅Azure Data Explorer✅Azure Monitor✅Microsoft 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.
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 , , local right |
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
Související obsah
- Další informace o dalších příchutích spojení