다음을 통해 공유


union 연산자

적용 대상: ✅Microsoft Fabric✅Azure Data ExplorerAzure MonitorMicrosoft Sentinel

두 개 이상의 테이블을 사용하며 모든 행을 반환합니다.

구문

[ T | ] union [ UnionParameters ] [kind=|innerouter ] [withsource= ColumnName] [ ] Tablesisfuzzy= true|false

[ T | ] union [ ]|outerinnerkind= [withsource= ColumnName] [isfuzzy=|truefalse ] Tables

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

참고 항목

set 문을 사용하거나 클라이언트 요청 속성을 통해 요청 속성을 설정하여 best_effort true연산자의 작업을 union 변경할 수 있습니다. 이 속성을 설정 true하면 연산자는 union 유사 항목 확인 및 연결 실패를 무시하고 "unioned"인 하위 식을 실행하고 쿼리 상태 결과에 경고를 생성합니다.

매개 변수

이름 Type 필수 설명
T string 입력 테이블 형식 식입니다.
UnionParameters string 행 일치 작업 및 실행 계획의 동작을 제어하는 이름 = 형식의 공백으로 구분된 매개 변수가 0개 이상입니다. 지원되는 공용 구조체 매개 변수를 참조하세요.
kind string inner 또는 outer 중 하나입니다. inner 에서는 결과가 모든 입력 테이블에 공통적인 열의 하위 집합을 갖도록 합니다. outer 는 결과에 입력에서 발생하는 모든 열을 갖도록 합니다. 입력 행에 의해 정의되지 않은 셀은 .로 null설정됩니다. 기본값은 outer입니다.

결과에 outer는 입력에서 발생하는 모든 열, 각 이름 및 형식 발생에 대해 하나의 열이 있습니다. 즉, 열이 여러 테이블에 표시되고 여러 형식이 있는 경우 공용 구조체 결과의 각 형식에 해당하는 열이 있습니다. 이 열 이름에는 '_'와 원본 열 형식이 접미사가 붙습니다.
withsource=ColumnName string 지정한 경우 출력에는 각 행에 기여한 원본 테이블을 나타내는 ColumnName이라는 열이 포함됩니다. 쿼리가 기본 데이터베이스를 포함하여 둘 이상의 데이터베이스에서 테이블을 효과적으로 참조하는 경우 이 열의 값에는 데이터베이스로 한정된 테이블 이름이 있습니다. 클러스터 및 데이터베이스 자격은 둘 이상의 클러스터를 참조하는 경우 값에 있습니다.
isfuzzy bool true설정하면 공용 구조체 다리의 유사 해상도를 허용합니다. 공용 구조체 원본 집합은 쿼리를 분석하고 실행을 준비하는 동안 현재 존재하고 액세스할 수 있는 테이블 참조 집합으로 축소됩니다. 이러한 테이블이 하나 이상 발견되면 확인 실패가 쿼리 상태 결과에 경고를 생성하지만 쿼리 실행을 방지하지는 않습니다. 해결에 성공하지 못한 경우 쿼리는 오류를 반환합니다. 기본값은 false입니다.

isfuzzy=true 는 원본 확인 단계에만 적용됩니다 union . 원본 테이블 집합이 결정되면 추가 쿼리 실패가 표시되지 않습니다.
테이블 string 하나 이상의 쉼표로 구분된 테이블 참조, 괄호로 묶인 쿼리 식 또는 와일드카드로 지정된 테이블 집합입니다. 예를 들어 E* 이름이 시작되는 E데이터베이스에 있는 모든 테이블의 합합을 형성합니다.

지원되는 공용 구조체 매개 변수

속성 Type 필수 설명
hint.concurrency int 병렬로 실행해야 하는 연산자의 동시 하위 쿼리 수를 union 시스템에 암시합니다. 기본값은 클러스터의 단일 노드에 있는 CPU 코어 수(2~16)입니다.
hint.spread int 동시 union 하위 쿼리 실행에서 사용해야 하는 노드 수를 시스템에 암시합니다. 기본값은 1입니다.
속성 Type 필수 설명
T string 입력 테이블 형식 식입니다.
kind string inner 또는 outer 중 하나입니다. inner 에서는 결과가 모든 입력 테이블에 공통적인 열의 하위 집합을 갖도록 합니다. outer 는 결과에 입력에서 발생하는 모든 열을 갖도록 합니다. 입력 행에 의해 정의되지 않은 셀은 .로 null설정됩니다. 기본값은 outer입니다.

결과에 outer는 입력에서 발생하는 모든 열, 각 이름 및 형식 발생에 대해 하나의 열이 있습니다. 즉, 열이 여러 테이블에 표시되고 여러 형식이 있는 경우 공용 구조체 결과의 각 형식에 해당하는 열이 있습니다. 이 열 이름에는 '_'와 원본 열 형식이 접미사가 붙습니다.
withsource=ColumnName string 지정한 경우 출력에는 각 행에 기여한 원본 테이블을 나타내는 ColumnName이라는 열이 포함됩니다. 쿼리가 기본 데이터베이스를 포함하여 둘 이상의 데이터베이스에서 테이블을 효과적으로 참조하는 경우 이 열의 값에는 데이터베이스로 한정된 테이블 이름이 있습니다. 클러스터 및 데이터베이스 자격은 둘 이상의 클러스터를 참조하는 경우 값에 있습니다.
isfuzzy bool true설정하면 공용 구조체 다리의 유사 해상도를 허용합니다. 공용 구조체 원본 집합은 쿼리를 분석하고 실행을 준비하는 동안 현재 존재하고 액세스할 수 있는 테이블 참조 집합으로 축소됩니다. 이러한 테이블이 하나 이상 발견되면 확인 실패가 쿼리 상태 결과에 경고를 생성하지만 쿼리 실행을 방지하지는 않습니다. 해결에 성공하지 못한 경우 쿼리는 오류를 반환합니다. 그러나 작업 영역 간 및 앱 간 쿼리에서 작업 영역 또는 앱을 찾을 수 없으면 쿼리가 실패합니다. 기본값은 false입니다.

isfuzzy=true 는 원본 확인 단계에만 적용됩니다 union . 원본 테이블 집합이 결정되면 추가 쿼리 실패가 표시되지 않습니다.
테이블 string 하나 이상의 쉼표로 구분된 테이블 참조, 괄호로 묶인 쿼리 식 또는 와일드카드로 지정된 테이블 집합입니다. 예를 들어 E* 이름이 시작되는 E데이터베이스에 있는 모든 테이블의 합합을 형성합니다.

테이블 목록을 알 수 있을 때마다 와일드카드 사용을 삼가야 합니다. 일부 작업 영역에는 비효율적인 실행으로 이어질 수 있는 테이블 수가 매우 많습니다. 시간이 지남에 따라 테이블이 추가되어 예측되지 않은 결과가 발생할 수도 있습니다.

참고 항목

  • union 키워드로 특성이 지정된 경우 범위에 let 문을 포함view 수 있습니다.
  • 범위에는 union 함수가 포함되지 않습니다. 함수를 포함하려면 키워드를 사용하여 let 문을 정의합니다 view .
  • 공용 구조체 다리가 나타나는 순서는 보장되지 않지만 각 다리에 연산자가 order by 있는 경우 각 다리가 정렬됩니다.

반품

모든 입력된 테이블에 있는 만큼 행을 가진 테이블입니다.

예제

이름 또는 열에 문자열이 있는 테이블

union K* | where * has "Kusto"

이름이 로 시작 K되고 열에 단어가 Kusto포함된 데이터베이스의 모든 테이블의 행입니다.

고유 개수

union withsource=SourceTable kind=outer Query, Command
| where Timestamp > ago(1d)
| summarize dcount(UserId)

전날에 Query 이벤트 또는 Command 이벤트를 생성한 고유 사용자 수입니다. 결과에서 'SourceTable' 열은 "쿼리" 또는 "명령"을 나타냅니다.

Query
| where Timestamp > ago(1d)
| union withsource=SourceTable kind=outer 
   (Command | where Timestamp > ago(1d))
| summarize dcount(UserId)

더 효율적인 이 버전은 동일한 결과를 생성합니다. 합집합을 생성하기 전에 각 테이블을 필터링합니다.

isfuzzy=true 사용

// Using union isfuzzy=true to access non-existing view:                                     
let View_1 = view () { print x=1 };
let View_2 = view () { print x=1 };
let OtherView_1 = view () { print x=1 };
union isfuzzy=true
(View_1 | where x > 0), 
(View_2 | where x > 0),
(View_3 | where x > 0)
| count 

출력

Count
2

쿼리 상태 관찰 - 다음 경고가 반환됩니다. Failed to resolve entity 'View_3'

// Using union isfuzzy=true and wildcard access:
let View_1 = view () { print x=1 };
let View_2 = view () { print x=1 };
let OtherView_1 = view () { print x=1 };
union isfuzzy=true View*, SomeView*, OtherView*
| count 

출력

Count
3

쿼리 상태 관찰 - 다음 경고가 반환됩니다. Failed to resolve entity 'SomeView*'

원본 열 형식이 일치하지 않음

let View_1 = view () { print x=1 };
let View_2 = view () { print x=toint(2) };
union withsource=TableName View_1, View_2

출력

TableName x_long x_int
View_1 1
View_2 2
let View_1 = view () { print x=1 };
let View_2 = view () { print x=toint(2) };
let View_3 = view () { print x_long=3 };
union withsource=TableName View_1, View_2, View_3 

출력

TableName x_long1 x_int x_long
View_1 1
View_2 2
View_3 3

받은 열 x 의 접미사가 _long결과 스키마에 이미 있으므로 x_long 열 이름이 중복되지 않고 새 열이 생성 View_1 됩니다.x_long1