Clusterübergreifender Join
Eine clusterübergreifende Verknüpfung umfasst das Verknüpfen von Daten aus Datasets, die sich in verschiedenen Clustern befinden.
In einer clusterübergreifenden Verknüpfung kann die Abfrage an drei möglichen Speicherorten ausgeführt werden, die jeweils eine bestimmte Bezeichnung für den Verweis in diesem Dokument aufweisen:
- Lokaler Cluster: Der Cluster, an den die Anforderung gesendet wird, der auch als Cluster bezeichnet wird, der die Datenbank im Kontext hostt.
- Linker Cluster: Der Cluster, der die Daten auf der linken Seite des Joinvorgangs hosten.
- Rechter Cluster: Der Cluster, der die Daten auf der rechten Seite des Joinvorgangs hostt.
Der Cluster, der die Abfrage ausführt, ruft die Daten aus dem anderen Cluster ab.
Hinweis
Wenn die Daten auf der linken und rechten Seite eines Joinvorgangs im selben Cluster gehostet werden, werden sie nicht als clusterübergreifende Verknüpfung betrachtet, auch wenn die Daten außerhalb des lokalen Clusters gehostet werden.
Syntax
[ cluster(
ClusterName).database(
DatabaseName).
]LeftTable|
...
|
join
[ hint.remote=
Strategie ] (
[ cluster(
ClusterName).database(
DatabaseName).
]RightTable|
...
)
zu Den Bedingungen
Erfahren Sie mehr über Syntaxkonventionen.
Parameter
Name | Typ | Erforderlich | BESCHREIBUNG |
---|---|---|---|
LeftTable | string |
✔️ | Der linke Tabellen- oder Tabellenausdruck, dessen Zeilen zusammengeführt werden sollen. Wird als $left bezeichnet. |
Strategie | string |
Bestimmt den Cluster, auf dem der Join ausgeführt werden soll. Unterstützte Werte: left , right , local und auto . Weitere Informationen finden Sie unter Strategien. |
|
ClusterName | string |
Wenn sich die Daten für den Join außerhalb des lokalen Clusters befinden, verwenden Sie die cluster()- Funktion, um den Cluster anzugeben. | |
DatabaseName | string |
Wenn sich die Daten für den Join außerhalb des lokalen Datenbankkontexts befinden, verwenden Sie die Database() -Funktion, um die Datenbank anzugeben. | |
RightTable | string |
✔️ | Der richtige Tabellen- oder Tabellenausdruck, dessen Zeilen zusammengeführt werden sollen. Wird als $right bezeichnet. |
Conditions (MSBuild-Bedingungen) | string |
✔️ | Bestimmt, wie Zeilen aus LeftTable mit Zeilen aus RightTable abgeglichen werden. Wenn die Spalten, die Sie abgleichen möchten, in beiden Tabellen denselben Namen haben, verwenden Sie die Syntax ON ColumnName. Verwenden Sie andernfalls die Syntax ON $left. LeftColumn== $right. RightColumn. Um mehrere Bedingungen anzugeben, können Sie entweder das Schlüsselwort „and“ verwenden oder sie durch Kommas trennen. Wenn Sie Kommas verwenden, werden die Bedingungen mit dem logischen Operator „and“ ausgewertet. |
Strategien
In der folgenden Liste werden die unterstützten Werte für den Strategy-Parameter erläutert:
left
: Führen Sie den Join für den Cluster der linken Tabelle oder des linken Clusters aus.right
: Führen Sie den Join für den Cluster der rechten Tabelle oder des rechten Clusters aus.local
: Führen Sie den Join für den Cluster des aktuellen Clusters oder lokalen Clusters aus.auto
: (Standard) Kusto trifft die Remotingentscheidung.
Hinweis
Der Joinremotinghinweis wird ignoriert, wenn die Strategie mit Hinweis auf den Joinvorgang nicht anwendbar ist.
Funktionsweise der auto-Strategie
Standardmäßig bestimmt die Strategie anhand der auto
folgenden Regeln, wo die clusterübergreifende Verknüpfung ausgeführt werden soll:
- Wenn eine der Tabellen im lokalen Cluster gehostet wird, wird der Join für den lokalen Cluster ausgeführt.
- Wenn beide Tabellen außerhalb des lokalen Clusters gehostet werden, wird die Verknüpfung für den richtigen Cluster ausgeführt.
Betrachten Sie die folgenden Beispiele:
// 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
Mit der auto
Strategie würde "Beispiel 1" im lokalen Cluster ausgeführt. In "Beispiel 2" wird der Join im richtigen Cluster ausgeführt, wenn keiner der Cluster der lokale Cluster ist.
Überlegungen zur Leistung
Für eine optimale Leistung wird empfohlen, die Abfrage auf dem Cluster auszuführen, der die größte Tabelle enthält.
Betrachten wir noch einmal die folgenden Beispiele:
// 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
"Beispiel 1" ist für die Ausführung auf dem lokalen Cluster festgelegt. Wenn das von T | ...
erzeugte Dataset jedoch kleiner als eines ist, das bis cluster("B").database("DB").T2 | ...
dahin erstellt wurde, wäre es effizienter, den Joinvorgang für den Cluster B
auszuführen, in diesem Fall den richtigen Cluster anstelle des lokalen Clusters.
Die folgende Abfrage führt dies mithilfe der right
Strategie aus. Bei der right
Strategie wird der Joinvorgang im rechten Cluster ausgeführt, auch wenn sich die linke Tabelle im lokalen Cluster befindet.
T | ... | join hint.remote=right (cluster("B").database("DB").T2 | ...) on Col1
Verwandte Inhalte
Diese Funktion wird in Azure Monitor nicht unterstützt.
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für