union 연산자

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

Syntax

[ T| ] union [ UnionParameters ] [kind=|outerinner] [withsource=ColumnName] [isfuzzy=|truefalse] 테이블

구문 규칙에 대해 자세히 알아보세요.

참고

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

매개 변수

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

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

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

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

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

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

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

테이블 목록을 아는 경우 와일드카드를 사용하지 마세요. 테이블이 매우 많아서 비효율적으로 실행될 수 있는 작업 영역도 있습니다. 또한 테이블이 점점 추가되어 예기치 못한 결과를 초래할 수도 있습니다.

참고

  • union scope 키워드(keyword) 특성이 있는 경우 let 문을 포함할view 수 있습니다.
  • union scope 함수를 포함하지 않습니다. 함수를 포함하려면 키워드(keyword) 사용하여 viewlet 문을 정의합니다.
  • 공용 구조체 다리가 표시되는 순서는 보장되지 않지만 각 다리에 연산자가 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 

출력

개수
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 

출력

개수
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

View_1x 열에서 _long 접미사를 받고, x_long이라는 열이 이미 결과 스키마에 있으므로 열 이름이 중복 제거되어 새 x_long1 열이 생성되었습니다.