Freigeben über


innerunique join

Gilt für: ✅Microsoft Fabric✅Azure Data ExplorerAzure MonitorMicrosoft 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.

Diagramm, das zeigt, wie die Verknüpfung funktioniert.

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, , leftlocalright 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