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 , local en 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 ON ColumnName. 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
Gerelateerde inhoud
Deze mogelijkheid wordt niet ondersteund in Azure Monitor
Feedback
https://aka.ms/ContentUserFeedback.
Binnenkort beschikbaar: In de loop van 2024 zullen we GitHub-problemen geleidelijk uitfaseren als het feedbackmechanisme voor inhoud en deze vervangen door een nieuw feedbacksysteem. Zie voor meer informatie:Feedback verzenden en weergeven voor