innerunique join
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 kind
parameter niet is opgegeven. Deze standaard implementatie is handig in logboek-/traceringsanalysescenario's, waarbij u twee gebeurtenissen wilt correleren op basis van een gedeelde correlatie-id. Hiermee kunt u alle exemplaren van het fenomeen ophalen zonder dubbele traceringsrecords te negeren die bijdragen aan de correlatie.
Syntax
LeftTable|
join
kind=innerunique
[ Hints ] Rechtstabelon
Voorwaarden
Meer informatie over syntaxisconventies.
Parameters
Naam | Type | Vereist | Beschrijving |
---|---|---|---|
LeftTable | string |
✔️ | De linkertabel of tabelvormige 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 Naamwaarde= die het gedrag van de rijovereenkomst en het uitvoeringsplan bepalen. Zie Hints voor meer informatie. |
|
Rechtstabel | 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 van LeftTable worden vergeleken 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 deze scheiden met komma's. Als u komma's gebruikt, worden de voorwaarden geëvalueerd met behulp van de logische operator 'en'. |
Tip
Als de ene tabel altijd kleiner is dan de andere, gebruikt u deze als de linkerkant van de join voor de beste prestaties.
Hints
Naam van parameters | Waarden | Beschrijving |
---|---|---|
hint.remote |
auto , left , local , right |
Zie Join tussen 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. |
Bekijk willekeurige query |
hint.strategy=shuffle |
De shuffle strategiequery deelt de querybelasting op clusterknooppunten, waarbij elk knooppunt één partitie van de gegevens verwerkt. |
Bekijk willekeurige query |
Retouren
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
De standaard innerunique join gebruiken
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 toetsen 'a' en 'd' worden niet weergegeven in de uitvoer, omdat er links en rechts geen overeenkomende sleutels waren.
De query heeft de standaard join uitgevoerd. Dit is een inner join na het ontdubbelen van de linkerkant op basis van de joinsleutel. Bij ontdubbeling blijft alleen de eerste record behouden. De resulterende linkerkant van de join na ontdubbeling is:
Sleutel | Waarde1 |
---|---|
een | 1 |
b | 2 |
c | 4 |
Twee mogelijke uitvoerwaarden van innerunique join
Notitie
De innerunique
join-smaak kan twee mogelijke uitvoer opleveren en beide zijn correct.
In de eerste uitvoer heeft de join-operator willekeurig de eerste sleutel geselecteerd die wordt weergegeven in t1, met de waarde 'val1.1' en deze overeenkomen 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 overeenkomen 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 is de gebruikte smaak innerunique en wordt het filter doorgegeven aan de linkerkant van de join. 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
where value == "val1.2"
toe. 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 van 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
Gerelateerde inhoud
- Meer informatie over andere join-varianten
Feedback
https://aka.ms/ContentUserFeedback.
Binnenkort beschikbaar: In de loop van 2024 zullen we GitHub-problemen geleidelijk uitfaseren als het feedbackmechanisme voor inhoud en deze vervangen door een nieuw feedbacksysteem. Zie voor meer informatie:Feedback verzenden en weergeven voor