innerunique join
Die innerunique
Verknüpfungsvariante entfernt doppelte Schlüssel von der linken Seite. Dieses Verhalten stellt sicher, dass die Ausgabe eine Zeile für jede Kombination von eindeutigen linken und rechten Tasten enthält.
Standardmäßig wird die Verknüpfungsvariante innerunique
verwendet, wenn der kind
Parameter nicht angegeben wird. Diese Standardimplementierung ist in Protokoll-/Ablaufverfolgungsanalyseszenarien nützlich, in denen Sie zwei Ereignisse basierend auf einer freigegebenen Korrelations-ID korrelieren möchten. Es ermöglicht Ihnen, alle Instanzen des Phänomens abzurufen, ohne doppelte Ablaufverfolgungsdatensätze zu ignorieren, die zur Korrelation beitragen.
Syntax
LeftTable|
join
kind=innerunique
[ Hinweise ] RightTableon
Bedingungen
Erfahren Sie mehr über Syntaxkonventionen.
Parameter
Name | Typ | Erforderlich | BESCHREIBUNG |
---|---|---|---|
LeftTable | string |
✔️ | Die linke Tabelle oder der tabellarischen Ausdruck, die bzw. der manchmal als äußere Tabelle bezeichnet wird, deren Zeilen zusammengeführt werden sollen. Wird als $left bezeichnet. |
Hinweise | string |
Null oder mehr durch Leerzeichen getrennte Join-Hinweise in Form von Name= Wert, die das Verhalten des Vorgangs zum Zuordnen der Zeilen und den Ausführungsplan steuern. Weitere Informationen finden Sie unter Hinweise. |
|
RightTable | string |
✔️ | Die rechte Tabelle oder der tabellarische Ausdruck, die bzw. der manchmal als innere Tabelle bezeichnet werden, deren Zeilen zusammengeführt werden sollen. Wird als $right bezeichnet. |
Conditions (MSBuild-Bedingungen) | string |
✔️ | Bestimmt, wie Zeilen aus LeftTable mit Zeilen aus RightTable abgeglichen werden. Wenn die Spalten, die Sie abgleichen möchten, in beiden Tabellen denselben Namen haben, verwenden Sie die Syntax ON ColumnName. Verwenden Sie andernfalls die Syntax ON $left. LeftColumn== $right. RightColumn. Um mehrere Bedingungen anzugeben, können Sie entweder das Schlüsselwort „and“ verwenden oder sie durch Kommas trennen. Wenn Sie Kommas verwenden, werden die Bedingungen mit dem logischen Operator „and“ ausgewertet. |
Tipp
Wenn eine Tabelle immer kleiner als die andere ist, verwenden Sie diese für die bestmögliche Leistung als die linke Seite des Join.
Hinweise
Parametername | Werte | Beschreibung |
---|---|---|
hint.remote |
auto , left , local , right |
Siehe clusterübergreifender Join |
hint.strategy=broadcast |
Gibt die Art und Weise an, in der die Abfragelast auf Clusterknoten verteilt wird. | Siehe Broadcast-Join |
hint.shufflekey=<key> |
Die shufflekey -Abfrage teilt die Abfragelast auf Clusterknoten auf, wobei ein Schlüssel zum Partitionieren der Daten verwendet wird. |
Weitere Informationen finden Sie unter Shuffleabfrage |
hint.strategy=shuffle |
Die shuffle -Strategieabfrage teilt die Abfragelast auf Clusterknoten auf, wobei jeder Knoten eine Partition der Daten verarbeitet. |
Weitere Informationen finden Sie unter Shuffleabfrage |
Gibt zurück
Schema: Alle Spalten aus beiden Tabellen, einschließlich der übereinstimmenden Schlüssel.
Zeilen: Alle deduplizierten Zeilen aus der linken Tabelle, die mit Zeilen aus der rechten Tabelle übereinstimmen.
Beispiele
Verwenden des standardmäßigen innerunique-Joins
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
Ausgabe
Schlüssel | Wert1 | Key1 | Wert2 |
---|---|---|---|
b | 2 | b | 10 |
c | 4 | c | 20 |
c | 4 | c | 30 |
Hinweis
Die Schlüssel „a“ und „d“ werden nicht in der Ausgabe angezeigt, da es keine übereinstimmenden Schlüssel links und rechts gab.
Die Abfrage hat den Standardbeitritt ausgeführt, bei dem es sich um einen inneren Join handelt, nachdem die linke Seite basierend auf dem Joinschlüssel dedupliziert wurde. Die Deduplizierung behält nur den ersten Datensatz bei. Die resultierende linke Seite der Verknüpfung nach der Deduplizierung lautet:
Schlüssel | Wert1 |
---|---|
a | 1 |
b | 2 |
c | 4 |
Zwei mögliche Ausgaben von innerunique join
Hinweis
Die innerunique
Verknüpfungsvariante kann zwei mögliche Ausgaben ergeben, und beide sind richtig.
In der ersten Ausgabe hat der join-Operator den ersten Schlüssel, der in t1 mit dem Wert „val1.1“ vorhanden ist, nach dem Zufallsprinzip ausgewählt und mit t2-Schlüsseln abgeglichen.
In der zweiten Ausgabe hat der join-Operator den zweiten Schlüssel, der in t1 mit dem Wert „val1.2“ vorhanden ist, nach dem Zufallsprinzip ausgewählt und mit t2-Schlüsseln abgeglichen.
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
Ausgabe
Schlüssel | value | key1 | value1 |
---|---|---|---|
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
Ausgabe
Schlüssel | value | key1 | value1 |
---|---|---|---|
1 | val1.2 | 1 | val1.3 |
1 | val1.2 | 1 | val1.4 |
- Kusto ist so optimiert, dass Filter, die nach dem
join
vorhanden sind, nach Möglichkeit auf die entsprechende Join-Seite (linke oder rechte Seite) gepusht werden. - Manchmal wird innerunique als Variante verwendet, und der Filter wird an die linke Seite des Joins weitergegeben. Die Variante wird automatisch weitergegeben, und die Schlüssel, die für diesen Filter gelten, werden in der Ausgabe angezeigt.
- Verwenden Sie das vorherige Beispiel, und fügen Sie einen Filter
where value == "val1.2"
hinzu. Es gibt das zweite Ergebnis und gibt nie das erste Ergebnis für die Datasets:
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"
Ausgabe
Schlüssel | value | key1 | value1 |
---|---|---|---|
1 | val1.2 | 1 | val1.3 |
1 | val1.2 | 1 | val1.4 |
Abrufen erweiterter Anmeldeaktivitäten
Abrufen erweiterter Aktivitäten aus einem login
, in dem einige Einträge den Start und das Ende einer Aktivität markieren.
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
Verwandte Inhalte
- Weitere Informationen zu anderen Join-Varianten
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für