Jointure entre clusters

Une jointure inter-cluster implique la jonction 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 en 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.

Notes

Si les données situées sur les côtés gauche et droit 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 inter-cluster, même si les données sont hébergées en dehors du cluster local.

Syntax

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

Découvrez les conventions de syntaxe.

Paramètres

Nom Type Obligatoire 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 à mettre en correspondre ont le même nom dans les deux tables, utilisez la syntaxe ONColumnName. Sinon, utilisez la syntaxe ON $left.LeftColumn==$right.RightColumn. 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 de gauche ou du cluster gauche.
  • right: exécutez la jointure sur le cluster de la table appropriée ou du cluster droit.
  • local: exécutez la jointure sur le cluster du cluster actuel ou du cluster local.
  • auto: (Valeur par défaut) Kusto prend la décision de communication à distance.

Notes

L’indicateur de communication à distance de jointure est ignoré si la stratégie suggérée ne s’applique pas à 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.

Examinons à 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

« L’exemple 1 » est défini pour s’exécuter sur le cluster local, mais si le jeu de données produit par T | ... est plus petit qu’un jeu de données produit par 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é, plutôt que sur le 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 droit, même si la table de gauche se trouve dans le cluster local.

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

Cette fonctionnalité n’est pas prise en charge dans Azure Monitor.