Freigeben über


Clusterübergreifender Join

Gilt für: ✅Microsoft Fabric✅Azure Data ExplorerAzure MonitorMicrosoft Sentinel

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 Stellen ausgeführt werden, die jeweils eine spezifische Referenzbezeichnung in diesem Dokument aufweisen:

  • Lokaler Cluster: Der Cluster, an den die Anforderung gesendet wird, der auch als Cluster bezeichnet wird, in dem die Datenbank im Kontext gehostet wird.
  • Linker Cluster: Der Cluster, der die Daten auf der linken Seite des Verknüpfungsvorgangs hosten.
  • Right cluster: The cluster hosting the data on the right side of the join operation.

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 Verknüpfungsvorgangs im selben Cluster gehostet werden, wird sie nicht als clusterübergreifende Verknüpfung betrachtet, auch wenn die Daten außerhalb des lokalen Clusters gehostet werden.

Syntax

[ cluster(ClusterName DatabaseName).).database(]LeftTable ... |
|join [ hint.remote=Strategie ](
  [ cluster(ClusterName-Datenbankname).database().]RightTable ... |
) zu Bedingungen

Erfahren Sie mehr über Syntaxkonventionen.

Parameter

Name Type Erforderlich BESCHREIBUNG
LeftTable string ✔️ Der linke Tabellen- oder tabellarische Ausdruck, dessen Zeilen zusammengeführt werden sollen. Wird als $left bezeichnet.
Strategie string Bestimmt den Cluster, auf dem die Verknüpfung 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 die Verknüpfung außerhalb des lokalen Clusters befinden, verwenden Sie die Cluster() -Funktion, um den Cluster anzugeben.
DatabaseName string Wenn sich die Daten für die Verknüpfung außerhalb des lokalen Datenbankkontexts befinden, verwenden Sie die Datenbank() -Funktion, um die Datenbank anzugeben.
RightTable string ✔️ Der rechte Tabellen- oder tabellarische Ausdruck, 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 RightColumn$right.==". 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 Strategieparameter erläutert:

  • left: Führen Sie die Verknüpfung auf dem Cluster der linken Tabelle oder im linken Cluster aus.
  • right: Führen Sie die Verknüpfung auf dem Cluster der rechten Tabelle oder im rechten Cluster aus.
  • local: Führen Sie die Verknüpfung auf dem Cluster des aktuellen Clusters oder lokalen Clusters aus.
  • auto: (Standard) Kusto trifft die Remotingentscheidung.

Hinweis

Der Hinweis zum Join-Remoting wird ignoriert, wenn die angedeutete Strategie nicht für den Verknüpfungsvorgang gilt.

Funktionsweise der Autostrategie

Standardmäßig bestimmt die auto Strategie, wo die clusterübergreifende Verknüpfung basierend auf den folgenden Regeln ausgeführt werden soll:

  • Wenn eine der Tabellen im lokalen Cluster gehostet wird, wird die Verknüpfung auf dem lokalen Cluster ausgeführt.
  • Wenn beide Tabellen außerhalb des lokalen Clusters gehostet werden, wird die Verknüpfung auf dem rechten 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 wird "Beispiel 1" auf dem lokalen Cluster ausgeführt. In "Beispiel 2" wird die Verknüpfung auf dem rechten Cluster ausgeführt, vorausgesetzt, kein Cluster ist der lokale Cluster.

Überlegungen zur Leistung

Für eine optimale Leistung wird empfohlen, die Abfrage auf dem Cluster auszuführen, der die größte Tabelle enthält.

Sehen wir uns die folgenden Beispiele erneut an:

// 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" wird auf den lokalen Cluster ausgeführt, aber wenn das von einem erstellten T | ... Dataset kleiner als eins cluster("B").database("DB").T2 | ... ist, wäre es effizienter, den Verknüpfungsvorgang auf dem Cluster Bauszuführen, in diesem Fall der richtige Cluster anstelle des lokalen Clusters.

Mit der folgenden Abfrage wird dies mithilfe der right Strategie ausgeführt. Bei der right Strategie wird der Verknüpfungsvorgang auf dem 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