innerunique join
Van toepassing op: ✅Microsoft Fabric✅Azure Data Explorer✅Azure Monitor✅Microsoft Sentinel-
De innerunique
join-smaak verwijdert dubbele sleutels aan de linkerkant. Dit gedrag zorgt ervoor dat de uitvoer een rij bevat voor elke combinatie van unieke linker- en rechtertoetsen.
Standaard wordt de innerunique
join-smaak gebruikt als de parameter kind
niet is opgegeven. Deze standaard implementatie is handig in scenario's voor logboek-/traceringsanalyse, waarbij u twee gebeurtenissen wilt correleren op basis van een gedeelde correlatie-id. Hiermee kunt u alle exemplaren van het fenomeen ophalen terwijl u dubbele traceringsrecords negeert die bijdragen aan de correlatie.
Syntaxis
LeftTable|
join
kind=innerunique
[ Hints ] RightTableon
Voorwaarden
Meer informatie over syntaxisconventies.
Parameters
Naam | Type | Vereist | Beschrijving |
---|---|---|---|
LeftTable- | string |
✔️ | De linkertabel of tabellaire expressie, ook wel de buitenste tabel genoemd, waarvan de rijen moeten worden samengevoegd. Aangeduid als $left . |
hints | string |
Nul of meer door spaties gescheiden joinhints in de vorm van Naam= Waarde waarmee het gedrag van de bewerking en het uitvoeringsplan voor rijovereenkomsten wordt bepaald. Zie Hintsvoor meer informatie. |
|
RightTable- | string |
✔️ | De rechtertabel of tabellaire expressie, ook wel de binnenste tabel genoemd, waarvan de rijen moeten worden samengevoegd. Aangeduid als $right . |
voorwaarden | string |
✔️ | Bepaalt hoe rijen uit LeftTable- overeenkomen met rijen uit RightTable-. Als de kolommen die u wilt vergelijken, dezelfde naam hebben in beide tabellen, gebruikt u de syntaxis ON ColumnName. Gebruik anders de syntaxis ON $left. LeftColumn== $right. RightColumn-. Als u meerdere voorwaarden wilt opgeven, kunt u het trefwoord 'en' gebruiken of scheiden met komma's. Als u komma's gebruikt, worden de voorwaarden geëvalueerd met behulp van de logische operator 'and'. |
Fooi
Als de ene tabel altijd kleiner is dan de andere, gebruikt u deze als de linkerkant van de join.
Hints
Naam van parameters | Waarden | Beschrijving |
---|---|---|
hint.remote |
auto , left , local , right |
Zie voor meerdere clusters |
hint.strategy=broadcast |
Hiermee geeft u de manier op om de querybelasting op clusterknooppunten te delen. | Zie broadcast join |
hint.shufflekey=<key> |
De shufflekey query deelt de querybelasting op clusterknooppunten met behulp van een sleutel om gegevens te partitioneren. |
Zie query's in willekeurige volgorde |
hint.strategy=shuffle |
De shuffle strategiequery deelt de querybelasting op clusterknooppunten, waarbij elk knooppunt één partitie van de gegevens verwerkt. |
Zie query's in willekeurige volgorde |
Retourneert
Schema-: alle kolommen uit beide tabellen, inclusief de overeenkomende sleutels.
rijen: alle ontdubbelde rijen uit de linkertabel die overeenkomen met rijen uit de rechtertabel.
Voorbeelden
Bekijk de voorbeelden en voer ze uit op uw Data Explorer-querypagina.
De standaard innerunique join gebruiken
De voorbeeldquery combineert rijen uit tabellen X en Y, waarbij de sleutels overeenkomen, waarbij alleen de rijen worden weergegeven die in beide tabellen voorkomen
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
uitvoer
Sleutel | Waarde1 | Sleutel1 | Waarde2 |
---|---|---|---|
b | 2 | b | 10 |
c | 4 | c | 20 |
c | 4 | c | 30 |
Notitie
De sleutels 'a' en 'd' worden niet weergegeven in de uitvoer, omdat er geen overeenkomende sleutels aan beide linker- en rechterkant zijn.
De query heeft de standaarddeelname uitgevoerd. Dit is een inner join na het ontdubbelen van de linkerkant op basis van de joinsleutel. De ontdubbeling bewaart alleen de eerste record. De resulterende linkerkant van de join na ontdubbeling is:
Sleutel | Waarde1 |
---|---|
een | 1 |
b | 2 |
c | 4 |
Twee mogelijke uitvoer van innerunique join
Notitie
De innerunique
joinsmaak kan twee mogelijke uitvoer opleveren en beide zijn juist.
In de eerste uitvoer heeft de join-operator willekeurig de eerste sleutel geselecteerd die in t1 wordt weergegeven, met de waarde 'val1.1' en deze overeenkomt met t2-sleutels.
In de tweede uitvoer heeft de join-operator willekeurig de tweede sleutel geselecteerd die wordt weergegeven in t1, met de waarde 'val1.2' en deze overeenkomt met t2-sleutels.
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
uitvoer
sleutel | waarde | key1 | waarde1 |
---|---|---|---|
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
uitvoer
sleutel | waarde | key1 | waarde1 |
---|---|---|---|
1 | val1.2 | 1 | val1.3 |
1 | val1.2 | 1 | val1.4 |
- Kusto is geoptimaliseerd voor het pushen van filters die na de
join
komen, naar de juiste joinzijde, links of rechts, indien mogelijk. - Soms wordt de gebruikte smaak innerunique en wordt het filter aan de linkerkant van de join doorgegeven. De smaak wordt automatisch doorgegeven en de sleutels die van toepassing zijn op dat filter, worden weergegeven in de uitvoer.
- Gebruik het vorige voorbeeld en voeg een filter toe
where value == "val1.2"
. Het geeft het tweede resultaat en geeft nooit het eerste resultaat voor de gegevenssets:
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"
uitvoer
sleutel | waarde | key1 | waarde1 |
---|---|---|---|
1 | val1.2 | 1 | val1.3 |
1 | val1.2 | 1 | val1.4 |
Uitgebreide aanmeldingsactiviteiten ophalen
Uitgebreide activiteiten ophalen uit een login
die sommige vermeldingen markeren als het begin en einde van een activiteit.
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
Verwante inhoud
- Meer informatie over andere joins