Cross-cluster-join

Een join tussen clusters omvat het samenvoegen van gegevens uit gegevenssets die zich in verschillende clusters bevinden.

In een join tussen clusters kan de query worden uitgevoerd op drie mogelijke locaties, elk met een specifieke aanduiding voor verwijzing in dit document:

  • Lokaal cluster: het cluster waarnaar de aanvraag wordt verzonden. Dit wordt ook wel het cluster genoemd dat als host fungeert voor de database in de context.
  • Linkercluster: het cluster dat als host fungeert voor de gegevens aan de linkerkant van de joinbewerking.
  • Rechtercluster: het cluster dat als host fungeert voor de gegevens aan de rechterkant van de joinbewerking.

Het cluster dat de query uitvoert, haalt de gegevens op uit het andere cluster.

Notitie

Als de gegevens aan de linker- en rechterkant van een joinbewerking in hetzelfde cluster worden gehost, worden deze niet beschouwd als een join tussen clusters, zelfs niet als de gegevens buiten het lokale cluster worden gehost.

Syntax

[ cluster(ClusterName).database(DatabaseName).]LeftTable| ...
|join [ hint.remote=Strategie ] (
  [ cluster(ClusterName).database(DatabaseName).]RightTable| ...
) op voorwaarden

Meer informatie over syntaxisconventies.

Parameters

Naam Type Vereist Beschrijving
LeftTable string ✔️ De linkertabel of tabellaire expressie waarvan de rijen moeten worden samengevoegd. Aangegeven als $left.
Strategie string Bepaalt het cluster waarop de join moet worden uitgevoerd. Ondersteunde waarden zijn: left, right, localen auto. Zie Strategieën voor meer informatie.
Clusternaam string Als de gegevens voor de join zich buiten het lokale cluster bevinden, gebruikt u de functie cluster() om het cluster op te geven.
Databasenaam string Als de gegevens voor de join zich buiten de lokale databasecontext bevinden, gebruikt u de functie database() om de database op te geven.
Rechtstabel string ✔️ De rechtertabel of tabellaire expressie waarvan de rijen moeten worden samengevoegd. Aangegeven als $right.
Voorwaarden string ✔️ Bepaalt hoe rijen uit LeftTable worden vergeleken met rijen uit RightTable. Als de kolommen die u wilt vergelijken dezelfde naam hebben in beide tabellen, gebruikt u de syntaxis ONColumnName. Gebruik anders de syntaxis ON $left.LeftColumn==$right.RightColumn. Als u meerdere voorwaarden wilt opgeven, kunt u het trefwoord 'en' gebruiken of ze scheiden met komma's. Als u komma's gebruikt, worden de voorwaarden geëvalueerd met behulp van de logische operator 'en'.

Strategieën

In de volgende lijst worden de ondersteunde waarden voor de parameter Strategie uitgelegd:

  • left: Voer join uit op het cluster van de linkertabel of het linkercluster.
  • right: Voer join uit op het cluster van de juiste tabel of het rechtercluster.
  • local: Voer join uit op het cluster van het huidige cluster of lokale cluster.
  • auto: (standaard) Kusto neemt de externe beslissing.

Notitie

De hint voor externe aanmelding wordt genegeerd als de hintstrategie niet van toepassing is op de joinbewerking.

Hoe de automatische strategie werkt

Standaard bepaalt de auto strategie waar de clusteroverschrijdende join moet worden uitgevoerd op basis van de volgende regels:

  • Als een van de tabellen wordt gehost in het lokale cluster, wordt de join uitgevoerd op het lokale cluster.
  • Als beide tabellen buiten het lokale cluster worden gehost, wordt join uitgevoerd op het juiste cluster.

Bekijk de volgende voorbeelden:

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

Met de auto strategie wordt 'Voorbeeld 1' uitgevoerd op het lokale cluster. In 'Voorbeeld 2', ervan uitgaande dat geen van beide clusters het lokale cluster is, wordt de join uitgevoerd op het juiste cluster.

Prestatieoverwegingen

Voor optimale prestaties raden we u aan de query uit te voeren op het cluster dat de grootste tabel bevat.

Laten we eens kijken naar de volgende voorbeelden:

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

'Voorbeeld 1' is ingesteld om te worden uitgevoerd op het lokale cluster, maar als de gegevensset die wordt geproduceerd door T | ... kleiner is dan de gegevensset die door is geproduceerd cluster("B").database("DB").T2 | ... , is het efficiënter om de joinbewerking uit te voeren op het cluster B, in dit geval het juiste cluster, in plaats van op het lokale cluster.

De volgende query doet dit met behulp van de right strategie. Met de right strategie wordt de joinbewerking uitgevoerd op het rechtercluster, zelfs als de linkertabel zich in het lokale cluster bevindt.

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

Deze mogelijkheid wordt niet ondersteund in Azure Monitor