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 ONColumnName. 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 Bauszufü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

Diese Funktion wird in Azure Monitor nicht unterstützt.