Partager via


jointure innerunique

S’applique à : ✅Microsoft Fabric✅Azure Data ExplorerAzure MonitorMicrosoft Sentinel

La innerunique saveur de jointure supprime les clés dupliquées du côté gauche. Ce comportement garantit que la sortie contient une ligne pour chaque combinaison de touches de gauche et de droite uniques.

Par défaut, la saveur de innerunique jointure est utilisée si le kind paramètre n’est pas spécifié. Cette implémentation par défaut est utile dans les scénarios d’analyse de journal/trace, où vous souhaitez mettre en corrélation deux événements en fonction d’un ID de corrélation partagé. Il vous permet de récupérer toutes les instances du phénomène tout en ignorant les enregistrements de trace en double qui contribuent à la corrélation.

Diagramme montrant le fonctionnement de la jointure.

Syntaxe

LeftTable [ Hints ] RightTable on | join kind=innerunique Conditions

En savoir plus sur les conventions de syntaxe.

Paramètres

Nom Type Requise Description
LeftTable string ✔️ La table de gauche ou expression tabulaire, parfois appelée « table externe », dont les lignes doivent être fusionnées. Désignée sous la forme suivante : $left.
Indicateurs string Zéro ou plusieurs indicateurs de jointure séparés par l’espace sous la forme de valeur de nom = qui contrôlent le comportement de l’opération de correspondance de ligne et du plan d’exécution. Pour plus d’informations, consultez Indicateurs.
RightTable string ✔️ La table de droite ou expression tabulaire, parfois appelée « table interne », dont les lignes doivent être fusionnées. Désignée sous la forme suivante : $right.
Conditions string ✔️ Détermine le mode de mise en correspondance des lignes de LeftTable avec les lignes de RightTable. Si les colonnes que vous souhaitez mettre en correspondance ont le même nom dans les deux tables, utilisez la syntaxe ON ColumnName. Sinon, utilisez la syntaxe ON $left.LeftColumn RightColumn == $right.. Pour spécifier plusieurs conditions, vous pouvez utiliser le mot clé « and » ou séparer les conditions par des virgules. Si vous utilisez des virgules, les conditions sont évaluées avec l’opérateur logique « and ».

Conseil

Pour des performances optimales, si une table est toujours plus petite que l’autre, utilisez-la pour le côté gauche de la jointure.

Indicateurs

Nom des paramètres Valeurs Description
hint.remote auto, , leftlocal, ,right Voir Jointure entre clusters
hint.strategy=broadcast Spécifie comment partager la charge de la requête sur les nœuds du cluster. Consultez Répartir une jointure.
hint.shufflekey=<key> La requête shufflekey partage la charge de requête sur les nœuds de cluster à l’aide d’une clé pour partitionner les données. Voir requête de lecture aléatoire
hint.strategy=shuffle La requête de stratégie shuffle partage la charge de requête sur les nœuds de cluster, où chaque nœud traite une partition des données. Voir requête de lecture aléatoire

Retours

Schéma : toutes les colonnes des deux tables, y compris les clés correspondantes.
Lignes : toutes les lignes dédupliquées de la table de gauche qui correspondent aux lignes de la table de droite.

Exemples

Utiliser la jointure innerunique par défaut

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

Sortie

Clé Value1 Clé1 Value2
b 2 b 10
c 4 c 20
c 4 c 30

Notes

Les clés « a » et « d » n'apparaissent pas dans la sortie, car elles ne figuraient pas à la fois du côté gauche et du côté droit.

La requête a exécuté la jointure par défaut, qui est une jointure interne après avoir dédupliqué le côté gauche en fonction de la clé de jointure. La déduplication conserve uniquement le premier enregistrement. Le côté gauche résultant de la jointure après la déduplication est :

Clé Value1
a 1
b 2
c 4

Deux sorties possibles de jointure innerunique

Remarque

La saveur de innerunique jointure peut générer deux sorties possibles et les deux sont correctes. Dans la première sortie, l'opérateur de jointure a sélectionné au hasard la première clé qui apparaît dans t1, avec la valeur « val1.1 », et l'a mise en correspondance avec les clés t2. Dans la deuxième sortie, l'opérateur de jointure a sélectionné au hasard la deuxième clé qui apparaît dans t1, avec la valeur « val1.2 », et l'a mise en correspondance avec les clés t2.

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

Sortie

key value key1 valeur1
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

Sortie

key value key1 valeur1
1 val1.2 1 val1.3
1 val1.2 1 val1.4
  • Kusto est optimisé pour transmettre (push) les filtres qui suivent l'opérateur join vers le côté approprié de la jointure, à gauche ou à droite, lorsque cela est possible.
  • Parfois, la saveur utilisée est innerunique et le filtre est propagé vers le côté gauche de la jointure. La saveur est propagée automatiquement et les clés qui s’appliquent à ce filtre apparaissent dans la sortie.
  • Utilisez l’exemple précédent et ajoutez un filtre where value == "val1.2" . Il donne le deuxième résultat et ne donnera jamais le premier résultat pour les jeux de données :
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"

Sortie

key value key1 valeur1
1 val1.2 1 val1.3
1 val1.2 1 val1.4

Obtenir des activités de connexion étendues

Obtenez des activités étendues à partir d'un login que certaines entrées marquent comme le début et la fin d'une activité.

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