Delen via


Join tussen clusters

Van toepassing op: ✅Microsoft FabricAzure Data ExplorerAzure MonitorMicrosoft Sentinel-

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 referentie 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.
  • juiste cluster: het cluster dat als host fungeert voor de gegevens aan de rechterkant van de joinbewerking.

Het cluster waarmee de query wordt uitgevoerd, haalt de gegevens op uit het andere cluster.

Notitie

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

Syntaxis

[ 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. Aangeduid als $left.
strategie string Bepaalt het cluster waarop de join moet worden uitgevoerd. Ondersteunde waarden zijn: left, right, localen auto. Zie Strategieënvoor meer informatie.
clusternaam string Als de gegevens voor de join zich buiten het lokale cluster bevinden, gebruikt u de cluster() functie om het cluster op te geven.
DatabaseName- string Als de gegevens voor de join zich buiten de context van de lokale database bevinden, gebruikt u de database() functie om de database op te geven.
RightTable- string ✔️ De rechtertabel of tabellaire expressie waarvan de rijen moeten worden samengevoegd. Aangeduid als $right.
voorwaarden string ✔️ Bepaalt hoe rijen uit LeftTable- overeenkomen 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 scheiden met komma's. Als u komma's gebruikt, worden de voorwaarden geëvalueerd met behulp van de logische operator 'and'.

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 juiste cluster.
  • local: Voer join uit op het cluster van het huidige cluster of lokaal cluster.
  • auto: (standaard) Kusto neemt de externe beslissing.

Notitie

De hint voor externe deelname wordt genegeerd als de hintedstrategie niet van toepassing is op de join-bewerking.

Hoe de automatische strategie werkt

Standaard bepaalt de auto strategie waar de join tussen clusters wordt 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. Met de automatische strategie wordt deze query bijvoorbeeld uitgevoerd op het lokale cluster:

    T | ... | join (cluster("B").database("DB").T2 | ...) on Col1
    
  • Als beide tabellen buiten het lokale cluster worden gehost, wordt join uitgevoerd op het juiste cluster. Als er bijvoorbeeld geen van beide clusters het lokale cluster is, wordt de join uitgevoerd op het juiste cluster:

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

Prestatieoverwegingen

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

Als in het volgende voorbeeld de gegevensset die is geproduceerd door T | ... kleiner is dan een gegevensset die door cluster("B").database("DB").T2 | ... wordt geproduceerd, 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.

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

U kunt de query opnieuw schrijven om hint.remote=right te gebruiken om de prestaties te optimaliseren. Op deze manier wordt de joinbewerking uitgevoerd op het juiste cluster, zelfs als de linkertabel zich in het lokale cluster bevindt.

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