Partager via


Jointure entre clusters

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

Une jointure inter-clusters implique la jointure de données à partir de jeux de données qui résident dans différents clusters.

Dans une jointure inter-cluster, la requête peut être exécutée à trois emplacements possibles, chacun avec une désignation spécifique pour référence dans ce document :

  • Cluster local : cluster auquel la demande est envoyée, également appelé cluster hébergeant la base de données dans le contexte.
  • Cluster gauche : cluster hébergeant les données sur le côté gauche de l’opération de jointure.
  • Cluster droit : cluster hébergeant les données sur le côté droit de l’opération de jointure.

Le cluster qui exécute la requête extrait les données de l’autre cluster.

Remarque

Si les données situées à gauche et à droite d’une opération de jointure sont hébergées dans le même cluster, elles ne sont pas considérées comme une jointure entre clusters, même si les données sont hébergées en dehors du cluster local.

Syntaxe

[ cluster(ClusterName DatabaseName).).database(]LeftTable ... |
|join [ hint.remote=Stratégie ](
  [ cluster(ClusterName DatabaseName).).database(]RightTable ... |
) sur les conditions

En savoir plus sur les conventions de syntaxe.

Paramètres

Nom Type Requise Description
LeftTable string ✔️ Table de gauche ou expression tabulaire dont les lignes doivent être fusionnées. Désignée sous la forme suivante : $left.
Stratégie string Détermine le cluster sur lequel exécuter la jointure. Les valeurs prises en charge sont left, right, local et auto. Pour plus d’informations, consultez Stratégies.
Nom du cluster string Si les données de la jointure résident en dehors du cluster local, utilisez la fonction cluster() pour spécifier le cluster.
DatabaseName string Si les données de la jointure résident en dehors du contexte de base de données local, utilisez la fonction database() pour spécifier la base de données.
RightTable string ✔️ Table ou expression tabulaire de droite 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 ».

Stratégies

La liste suivante explique les valeurs prises en charge pour le paramètre stratégie :

  • left: exécutez la jointure sur le cluster de la table gauche ou sur le cluster gauche.
  • right: exécutez la jointure sur le cluster de la table appropriée ou sur le cluster approprié.
  • local: exécutez la jointure sur le cluster du cluster actuel ou sur le cluster local.
  • auto: (par défaut) Kusto prend la décision de communication à distance.

Remarque

L’indicateur de communication à distance de jointure est ignoré si la stratégie d’indicateur n’est pas applicable à l’opération de jointure.

Fonctionnement de la stratégie automatique

Par défaut, la auto stratégie détermine où la jointure inter-cluster doit être exécutée en fonction des règles suivantes :

  • Si l’une des tables est hébergée dans le cluster local, la jointure est effectuée sur le cluster local.
  • Si les deux tables sont hébergées en dehors du cluster local, la jointure est effectuée sur le cluster approprié.

Penchez-vous sur les exemples suivants :

// Example 1
T | ... | join (cluster("B").database("DB").T2 | ...) on Col1

// Example 2
cluster("B").database("DB").T | ... | join (cluster("C").database("DB2").T2 | ...) on Col1

Avec la auto stratégie, « Exemple 1 » est exécuté sur le cluster local. Dans « Exemple 2 », en supposant qu’aucun cluster n’est le cluster local, la jointure est exécutée sur le cluster approprié.

Considérations relatives aux performances

Pour des performances optimales, nous vous recommandons d’exécuter la requête sur le cluster qui contient la plus grande table.

Prenons à nouveau les exemples suivants :

// Example 1
T | ... | join (cluster("B").database("DB").T2 | ...) on Col1

// Example 2
cluster("B").database("DB").T | ... | join (cluster("C").database("DB2").T2 | ...) on Col1

« Exemple 1 » est défini pour s’exécuter sur le cluster local, mais si le jeu de données produit par T | ... est inférieur à un jeu de données produit, cluster("B").database("DB").T2 | ... il serait plus efficace d’exécuter l’opération de jointure sur le cluster B, dans ce cas le cluster approprié, au lieu du cluster local.

La requête suivante effectue cette opération à l’aide de la right stratégie. Avec la right stratégie, l’opération de jointure est effectuée sur le cluster de droite, même si la table gauche se trouve dans le cluster local.

T | ... | join hint.remote=right (cluster("B").database("DB").T2 | ...) on Col1