클러스터 간 조인

클러스터 간 조인에는 서로 다른 클러스터에 있는 데이터 세트의 데이터 조인이 포함됩니다.

클러스터 간 조인에서 쿼리는 가능한 세 위치에서 실행할 수 있으며, 각 위치에서는 이 문서 전체에서 참조를 위한 특정 지정을 사용할 수 있습니다.

  • 로컬 클러스터: 요청이 전송되는 클러스터이며, 컨텍스트에서 데이터베이스를 호스팅하는 클러스터라고도 합니다.
  • 왼쪽 클러스터: 조인 작업의 왼쪽에 있는 데이터를 호스팅하는 클러스터입니다.
  • 오른쪽 클러스터: 조인 작업의 오른쪽에 있는 데이터를 호스팅하는 클러스터입니다.

쿼리를 실행하는 클러스터는 다른 클러스터에서 데이터를 가져옵니다.

참고

조인 작업의 왼쪽과 오른쪽에 있는 데이터가 동일한 클러스터에서 호스트되는 경우 데이터가 로컬 클러스터 외부에서 호스트되더라도 클러스터 간 조인으로 간주되지 않습니다.

Syntax

[ cluster(ClusterName).database(DatabaseName).]LeftTable| ...
|join [ hint.remote=전략 ] (
  [ cluster(ClusterName).database(DatabaseName).]RightTable| ...
)조건

구문 규칙에 대해 자세히 알아봅니다.

매개 변수

이름 형식 필수 Description
LeftTable string ✔️ 행을 병합할 왼쪽 테이블 또는 테이블 형식 식입니다. $left로 표시됩니다.
전략 string 조인을 실행할 클러스터를 결정합니다. 지원되는 값은 left, right, localauto입니다. 자세한 내용은 전략을 참조하세요.
ClusterName string 조인의 데이터가 로컬 클러스터 외부에 있는 경우 cluster() 함수를 사용하여 클러스터를 지정합니다.
DatabaseName string 조인에 대한 데이터가 로컬 데이터베이스 컨텍스트 외부에 있는 경우 database() 함수를 사용하여 데이터베이스를 지정합니다.
RightTable string ✔️ 행을 병합할 올바른 테이블 또는 테이블 형식 식입니다. $right로 표시됩니다.
조건 string ✔️ LeftTable의 행을 RightTable의 행과 일치시킬 방법을 결정합니다. 일치하려는 열의 이름이 두 테이블 모두에 같은 경우 ColumnName 구문을 ON 사용합니다. 그렇지 않으면 LeftColumnRightColumn==$right. 구문을 ON $left. 사용합니다. 여러 조건을 지정하려면 "and" 키워드(keyword) 사용하거나 쉼표로 구분할 수 있습니다. 쉼표로 사용하는 경우 조건은 "and" 논리 연산자를 사용하여 평가됩니다.

전략

다음 목록에서는 Strategy 매개 변수에 지원되는 값을 설명합니다.

  • left: 왼쪽 테이블 또는 왼쪽 클러스터의 클러스터에서 조인을 실행합니다.
  • right: 오른쪽 테이블 또는 오른쪽 클러스터의 클러스터에서 조인을 실행합니다.
  • local: 현재 클러스터 또는 로컬 클러스터의 클러스터에서 조인을 실행합니다.
  • auto: (기본값) Kusto는 원격 결정을 내립니다.

참고

조인 작업에 힌트된 전략을 적용할 수 없는 경우 조인 원격 힌트는 무시됩니다.

자동 전략의 작동 방식

기본적으로 auto 전략은 다음 규칙에 따라 클러스터 간 조인을 실행할 위치를 결정합니다.

  • 테이블 중 하나가 로컬 클러스터에서 호스트되는 경우 조인은 로컬 클러스터에서 수행됩니다.
  • 두 테이블이 모두 로컬 클러스터 외부에서 호스트되는 경우 조인은 올바른 클러스터에서 수행됩니다.

다음 예제를 살펴보세요.

// 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 로컬 클러스터에서 "예제 1"이 실행됩니다. "예제 2"에서 두 클러스터가 모두 로컬 클러스터가 아닐 경우 조인은 올바른 클러스터에서 실행됩니다.

성능 고려 사항

최적의 성능을 위해 가장 큰 테이블을 포함하는 클러스터에서 쿼리를 실행하는 것이 좋습니다.

다음 예제를 다시 살펴보겠습니다.

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

"예제 1"은 로컬 클러스터에서 실행되도록 설정되어 있지만 에서 생성된 T | ... 데이터 세트가 생성된 cluster("B").database("DB").T2 | ... 데이터 세트보다 작으면 클러스터 B에서 조인 작업을 실행하는 것이 더 효율적입니다. 이 경우 로컬 클러스터 대신 올바른 클러스터를 실행합니다.

다음 쿼리는 전략을 사용하여 right 이 작업을 수행합니다. 전략을 사용하면 right 왼쪽 테이블이 로컬 클러스터에 있더라도 오른쪽 클러스터에서 조인 작업이 수행됩니다.

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

이 기능은 Azure Monitor에서 지원되지 않습니다.