Join tussen clusters
Van toepassing op: ✅Microsoft Fabric✅Azure Data Explorer✅Azure Monitor✅Microsoft 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 , local en 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 ON ColumnName. 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