innerunique 조인
조인 innerunique
버전은 왼쪽에서 중복 키를 제거합니다. 이 동작은 출력에 고유한 왼쪽 및 오른쪽 키의 모든 조합에 대한 행을 포함하도록 합니다.
기본적으로 조인 innerunique
버전은 매개 변수가 kind
지정되지 않은 경우 사용됩니다. 이 기본 구현은 공유 상관 관계 ID를 기반으로 두 이벤트의 상관 관계를 지정하는 것을 목표로 하는 로그/추적 분석 시나리오에서 유용합니다. 상관 관계에 기여하는 중복 추적 레코드를 무시하면서 현상의 모든 인스턴스를 검색할 수 있습니다.
Syntax
LeftTable|
join
kind=innerunique
[ 힌트 ] RightTableon
조건
구문 규칙에 대해 자세히 알아보세요.
매개 변수
이름 | 형식 | 필수 | Description |
---|---|---|---|
LeftTable | string |
✔️ | 행을 병합할 외부 테이블이라고도 하는 왼쪽 테이블 또는 테이블 형식 식입니다. $left 로 표시됩니다. |
힌트 | string |
행 일치 작업 및 실행 계획의 동작을 제어하는 이름= 값 형식의 공백으로 구분된 조인 힌트가 0개 이상 있습니다. 자세한 내용은 힌트를 참조하세요. |
|
RightTable | string |
✔️ | 행을 병합할 내부 테이블이라고도 하는 올바른 테이블 또는 테이블 형식 식입니다. $right 로 표시됩니다. |
조건 | string |
✔️ | LeftTable의 행을 RightTable의 행과 일치시킬 방법을 결정합니다. 일치시킬 열의 이름이 두 테이블 모두에 같은 경우 ColumnName 구문을 ON 사용합니다. 그렇지 않으면 LeftColumn RightColumn== $right. 구문을 ON $left. 사용합니다. 여러 조건을 지정하려면 "and" 키워드(keyword) 사용하거나 쉼표로 구분할 수 있습니다. 쉼표 를 사용하는 경우 조건은 "and" 논리 연산자를 사용하여 평가됩니다. |
팁
최상의 성능을 위해 한 테이블이 항상 다른 테이블보다 작은 경우 조인의 왼쪽으로 사용합니다.
힌트
매개 변수 이름 | 값 | 설명 |
---|---|---|
hint.remote |
auto , left , local , right |
클러스터 간 조인 참조 |
hint.strategy=broadcast |
클러스터 노드에서 쿼리 부하를 공유하는 방법을 지정합니다. | 브로드캐스트 조인 참조 |
hint.shufflekey=<key> |
쿼리는 shufflekey 키를 사용하여 데이터를 분할하는 클러스터 노드의 쿼리 부하를 공유합니다. |
순서 섞기 쿼리 참조 |
hint.strategy=shuffle |
전략 쿼리는 shuffle 각 노드가 데이터의 하나의 파티션을 처리하는 클러스터 노드의 쿼리 부하를 공유합니다. |
순서 섞기 쿼리 참조 |
반환
스키마: 일치하는 키를 포함하여 두 테이블의 모든 열입니다.
행: 왼쪽 테이블의 중복 제거된 모든 행이 오른쪽 테이블의 행과 일치합니다.
예제
기본 innerunique 조인 사용
let X = datatable(Key:string, Value1:long)
[
'a',1,
'b',2,
'b',3,
'c',4
];
let Y = datatable(Key:string, Value2:long)
[
'b',10,
'c',20,
'c',30,
'd',40
];
X | join Y on Key
출력
키 | 값1 | 키1 | 값2 |
---|---|---|---|
b | 2 | b | 10 |
c | 4 | c | 20 |
c | 4 | c | 30 |
참고
왼쪽과 오른쪽 모두에 일치하는 키가 없으므로 'a' 및 'd' 키는 출력에 표시되지 않습니다.
쿼리는 조인 키를 기반으로 왼쪽을 중복 제거한 후 내부 조인 기본 조인을 실행했습니다. 중복 제거는 첫 번째 레코드만 유지합니다. 중복 제거 후 조인의 결과 왼쪽은 다음과 같습니다.
키 | 값1 |
---|---|
a | 1 |
b | 2 |
c | 4 |
innerunique 조인에서 두 개의 가능한 출력
참고
조인 innerunique
버전은 두 개의 가능한 출력을 생성할 수 있으며 둘 다 올바릅니다.
첫 번째 출력에서 join 연산자는 값이 "val1.1"인 t1에 표시되는 첫 번째 키를 임의로 선택하고 t2 키와 일치시켰습니다.
두 번째 출력에서 join 연산자는 값이 "val1.2"인 t1에 표시되는 두 번째 키를 임의로 선택하고 t2 키와 일치시켰습니다.
let t1 = datatable(key: long, value: string)
[
1, "val1.1",
1, "val1.2"
];
let t2 = datatable(key: long, value: string)
[
1, "val1.3",
1, "val1.4"
];
t1
| join kind = innerunique
t2
on key
출력
key | 값 | key1 | value1 |
---|---|---|---|
1 | val1.1 | 1 | val1.3 |
1 | val1.1 | 1 | val1.4 |
let t1 = datatable(key: long, value: string)
[
1, "val1.1",
1, "val1.2"
];
let t2 = datatable(key: long, value: string)
[
1, "val1.3",
1, "val1.4"
];
t1
| join kind = innerunique
t2
on key
출력
key | 값 | key1 | value1 |
---|---|---|---|
1 | val1.2 | 1 | val1.3 |
1 | val1.2 | 1 | val1.4 |
- Kusto는 가능한 경우
join
뒤에 나오는 필터를 적절한 조인 쪽(왼쪽 또는 오른)으로 푸시하도록 최적화되어 있습니다. - 경우에 따라 사용되는 특징은 innerunique이고 필터가 조인의 왼쪽으로 전파됩니다. 버전이 자동으로 전파되고 해당 필터에 적용되는 키가 출력에 표시됩니다.
- 이전 예제를 사용하고 필터
where value == "val1.2"
를 추가합니다. 두 번째 결과를 제공하고 데이터 세트에 대한 첫 번째 결과를 제공하지 않습니다.
let t1 = datatable(key: long, value: string)
[
1, "val1.1",
1, "val1.2"
];
let t2 = datatable(key: long, value: string)
[
1, "val1.3",
1, "val1.4"
];
t1
| join kind = innerunique
t2
on key
| where value == "val1.2"
출력
key | 값 | key1 | value1 |
---|---|---|---|
1 | val1.2 | 1 | val1.3 |
1 | val1.2 | 1 | val1.4 |
확장 로그인 활동 가져오기
일부 항목이 작업의 시작 및 끝으로 표시되는 login
에서 확장된 작업을 가져옵니다.
let Events = MyLogTable | where type=="Event" ;
Events
| where Name == "Start"
| project Name, City, ActivityId, StartTime=timestamp
| join (Events
| where Name == "Stop"
| project StopTime=timestamp, ActivityId)
on ActivityId
| project City, ActivityId, StartTime, StopTime, Duration = StopTime - StartTime
let Events = MyLogTable | where type=="Event" ;
Events
| where Name == "Start"
| project Name, City, ActivityIdLeft = ActivityId, StartTime=timestamp
| join (Events
| where Name == "Stop"
| project StopTime=timestamp, ActivityIdRight = ActivityId)
on $left.ActivityIdLeft == $right.ActivityIdRight
| project City, ActivityId, StartTime, StopTime, Duration = StopTime - StartTime
관련 콘텐츠
- 다른 조인 버전에 대해 알아보기
피드백
https://aka.ms/ContentUserFeedback
출시 예정: 2024년 내내 콘텐츠에 대한 피드백 메커니즘으로 GitHub 문제를 단계적으로 폐지하고 이를 새로운 피드백 시스템으로 바꿀 예정입니다. 자세한 내용은 다음을 참조하세요.다음에 대한 사용자 의견 제출 및 보기