jointure innerunique
S’applique à : ✅Microsoft Fabric✅Azure Data Explorer✅Azure Monitor✅Microsoft 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.
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 , , left local , ,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
Contenu connexe
- En savoir plus sur les autres saveurs de jointure