Sprzężenie między klastrami

Sprzężenia między klastrami obejmują łączenie danych z zestawów danych, które znajdują się w różnych klastrach.

W sprzężeniu między klastrami zapytanie można wykonać w trzech możliwych lokalizacjach, z których każde ma określone oznaczenie do odwołania w tym dokumencie:

  • Klaster lokalny: klaster, do którego jest wysyłane żądanie, znany również jako klaster hostujących bazę danych w kontekście.
  • Klaster po lewej stronie: klaster hostuje dane po lewej stronie operacji sprzężenia.
  • Klaster prawy: klaster hostuje dane po prawej stronie operacji sprzężenia.

Klaster, w ramach którego uruchomiono zapytanie, pobiera dane z innego klastra.

Uwaga

Jeśli dane po lewej i prawej stronie operacji sprzężenia są hostowane w tym samym klastrze, nie są uznawane za sprzężenia między klastrami, nawet jeśli dane są hostowane poza klastrem lokalnym.

Składnia

[ cluster(ClusterName DatabaseName).database().]LeftTable| ...
|join [ hint.remote=Strategia ] (
  [ cluster(ClusterName DatabaseName).database().]RightTable| ...
) na warunkach

Dowiedz się więcej o konwencjach składniowych.

Parametry

Nazwa Typ Wymagane Opis
LeftTable string ✔️ Lewa tabela lub wyrażenie tabelaryczne, którego wiersze mają zostać scalone. Oznaczono jako $left.
Strategia string Określa klaster, na którym ma zostać wykonane sprzężenie. Obsługiwane wartości to: left, , localrighti auto. Aby uzyskać więcej informacji, zobacz Strategie.
Nazwa klastra string Jeśli dane sprzężenia znajdują się poza klastrem lokalnym, użyj funkcji cluster(), aby określić klaster.
Databasename string Jeśli dane sprzężenia znajdują się poza kontekstem lokalnej bazy danych, użyj funkcji database(), aby określić bazę danych.
RightTable string ✔️ Właściwa tabela lub wyrażenie tabelaryczne, którego wiersze mają zostać scalone. Oznaczono jako $right.
Warunki string ✔️ Określa, jak wiersze z tabeli LeftTable są dopasowywane do wierszy z tabeli RightTable. Jeśli kolumny, które chcesz dopasować, mają taką samą nazwę w obu tabelach, użyj składni ONNazwakolumny. W przeciwnym razie użyj składni ON $left.LeftColumn RightColumn==$right.. Aby określić wiele warunków, możesz użyć słowa kluczowego "and" lub oddzielić je przecinkami. Jeśli używasz przecinków, warunki są oceniane przy użyciu operatora logicznego "and".

Strategie

Poniższa lista zawiera opis obsługiwanych wartości parametru Strategy :

  • left: wykonaj sprzężenia w klastrze tabeli po lewej stronie lub w lewym klastrze.
  • right: wykonaj sprzężenia w klastrze prawej tabeli lub w prawym klastrze.
  • local: wykonaj sprzężenia w klastrze bieżącego klastra lub klastra lokalnego.
  • auto: (Domyślnie) Usługa Kusto podejmuje decyzję o komunikacji wirtualnej.

Uwaga

Wskazówka dotycząca komunikacji zdalniej sprzężenia jest ignorowana, jeśli sugerowana strategia nie ma zastosowania do operacji łączenia.

Jak działa strategia automatyczna

Domyślnie strategia określa, auto gdzie należy wykonać sprzężenia między klastrami na podstawie następujących reguł:

  • Jeśli jedna z tabel jest hostowana w klastrze lokalnym, sprzężenia są wykonywane w klastrze lokalnym.
  • Jeśli obie tabele są hostowane poza klastrem lokalnym, sprzężenia są wykonywane w odpowiednim klastrze.

Rozważmy następujące przykłady:

// 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

auto W przypadku strategii "Przykład 1" zostanie wykonany w klastrze lokalnym. W przykładzie 2 przy założeniu, że żaden klaster nie jest klastrem lokalnym, sprzężenia zostaną wykonane w odpowiednim klastrze.

Zagadnienia dotyczące wydajności

Aby uzyskać optymalną wydajność, zalecamy uruchomienie zapytania w klastrze zawierającym największą tabelę.

Rozważmy ponownie następujące przykłady:

// 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

Wartość "Przykład 1" jest ustawiona na uruchomienie w klastrze lokalnym, ale jeśli zestaw danych utworzony przez T | ... program jest mniejszy niż jeden wygenerowany przez cluster("B").database("DB").T2 | ... klaster, bardziej wydajne byłoby wykonanie operacji sprzężenia w klastrze B, w tym przypadku w odpowiednim klastrze, a nie w klastrze lokalnym.

Poniższe zapytanie wykonuje to przy użyciu right strategii. right W przypadku strategii operacja sprzężenia jest wykonywana w prawym klastrze, nawet jeśli lewa tabela znajduje się w klastrze lokalnym.

T | ... | join hint.remote=right (cluster("B").database("DB").T2 | ...) on Col1

Ta funkcja nie jest obsługiwana w usłudze Azure Monitor