innerunique join
Gilt für: ✅Microsoft Fabric✅Azure Data Explorer✅Azure Monitor✅Microsoft Sentinel
Der innerunique
Verknüpfungsgeschmack 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 der Verknüpfungsgeschmack innerunique
verwendet, wenn der kind
Parameter nicht angegeben ist. 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, während doppelte Ablaufverfolgungsdatensätze ignoriert werden, die zur Korrelation beitragen.
Syntax
LeftTable |
join
kind=innerunique
[ Hinweise ] RightTable-Bedingungen on
Erfahren Sie mehr über Syntaxkonventionen.
Parameter
Name | Type | 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 Verknüpfungshinweise in Form des Namenswerts = , die das Verhalten des Vorgangs mit Zeilenübereinstimmung und des Ausführungsplans 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 RightColumn$right. == ". 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 Zeilen aus der rechten Tabelle entsprechen.
Beispiele
Verwenden der standardmäßigen innerunique-Verknüpfung
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 die Standardverknüfung ausgeführt, bei der es sich um eine innere Verknüpfung handelt, nachdem die linke Seite basierend auf der Verknüpfungsschlü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
Der innerunique
Verknüpfungsgeschmack kann zwei mögliche Ausgaben liefern, 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. Der Geschmack wird automatisch verteilt, 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
Zugehöriger Inhalt
- Erfahren Sie mehr über andere Verknüpfungsaromen