Koppling mellan kluster

En koppling mellan kluster omfattar anslutning av data från datauppsättningar som finns i olika kluster.

I en korsklusterkoppling kan frågan köras på tre möjliga platser, var och en med en specifik referensbeteckning i hela dokumentet:

  • Lokalt kluster: Det kluster som begäran skickas till, vilket även kallas det kluster som är värd för databasen i kontexten.
  • Vänster kluster: Klustret som är värd för data på vänster sida av kopplingsåtgärden.
  • Rätt kluster: Klustret som är värd för data på höger sida av kopplingsåtgärden.

Klustret som kör frågan hämtar data från det andra klustret.

Anteckning

Om data på vänster och höger sida av en kopplingsåtgärd finns i samma kluster betraktas de inte som en koppling mellan kluster, även om data finns utanför det lokala klustret.

Syntax

[ cluster(ClusterName).database(DatabaseName).]LeftTable| ...
|join [ hint.remote=Strategi ] (
  [ cluster(ClusterName).database(DatabaseName).]RightTable| ...
)villkor

Läs mer om syntaxkonventioner.

Parametrar

Namn Typ Obligatorisk Beskrivning
LeftTable string ✔️ Den vänstra tabellen eller tabelluttrycket vars rader ska sammanfogas. Betecknas som $left.
Strategi string Avgör på vilket kluster kopplingen ska köras. Värden som stöds är: left, right, localoch auto. Mer information finns i Strategier.
ClusterName string Om data för kopplingen finns utanför det lokala klustret använder du funktionen cluster() för att ange klustret.
Databasename string Om data för kopplingen finns utanför den lokala databaskontexten använder du funktionen database() för att ange databasen.
RightTable string ✔️ Den högra tabellen eller tabelluttrycket vars rader ska sammanfogas. Betecknas som $right.
Villkor string ✔️ Avgör hur rader från LeftTable matchas med rader från RightTable. Om de kolumner som du vill matcha har samma namn i båda tabellerna använder du syntaxen ONColumnName. Annars använder du syntaxen ON $left.LeftColumn==$right.RightColumn. Om du vill ange flera villkor kan du antingen använda nyckelordet "och" eller separera dem med kommatecken. Om du använder kommatecken utvärderas villkoren med den logiska operatorn "och".

Strategier

I följande lista förklaras de värden som stöds för parametern Strategy :

  • left: Kör koppling i klustret i den vänstra tabellen eller det vänstra klustret.
  • right: Kör koppling i klustret i den högra tabellen eller i rätt kluster.
  • local: Kör koppling i klustret i det aktuella klustret eller det lokala klustret.
  • auto: (Standard) Kusto fattar fjärrkommunikationsbeslutet.

Anteckning

Tipset om anslutningskommunikation ignoreras om den tipsade strategin inte gäller för kopplingsåtgärden.

Så här fungerar den automatiska strategin

Som standard auto avgör strategin var kopplingen mellan kluster ska köras baserat på följande regler:

  • Om en av tabellerna finns i det lokala klustret utförs kopplingen på det lokala klustret.
  • Om båda tabellerna finns utanför det lokala klustret utförs anslutningen på rätt kluster.

Överväg följande exempel:

// 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

auto Med strategin skulle "Exempel 1" köras på det lokala klustret. I exempel 2, förutsatt att inget av klustren är det lokala klustret, skulle kopplingen köras på rätt kluster.

Saker att tänka på gällande prestanda

För optimala prestanda rekommenderar vi att du kör frågan i klustret som innehåller den största tabellen.

Nu ska vi titta på följande exempel igen:

// 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

"Exempel 1" är inställt på att köras på det lokala klustret, men om datauppsättningen som skapas av T | ... är mindre än en som produceras av cluster("B").database("DB").T2 | ... så skulle det vara mer effektivt att köra kopplingsåtgärden på klustret B, i det här fallet rätt kluster, i stället för på det lokala klustret.

Följande fråga gör detta med hjälp right av strategin. right Med strategin utförs kopplingsåtgärden i det högra klustret, även om den vänstra tabellen finns i det lokala klustret.

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

Den här funktionen stöds inte i Azure Monitor