다음을 통해 공유


mv-expand 연산자

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

다중 값 동적 배열 또는 속성 모음을 여러 레코드로 확장합니다.

mv-expand 은 여러 값을 단일 동적 형식 배열 또는 속성 모음(예 summarize : ... make-list()make-series)으로 압축하는 집계 연산자의 반대로 설명할 수 있습니다. (스칼라) 배열 또는 속성 모음의 각 요소는 연산자의 출력에 새 레코드를 생성합니다. 확장되지 않은 입력의 모든 열은 출력의 모든 레코드에 복제됩니다.

구문

T |mv-expand [kind=(bagarray | )] [with_itemindex= IndexColumnName] ColumnName [to typeof( Typename)] [, ColumnName ...] [limit Rowlimit]

T [(bagarray | )] [kind=Name =] ArrayExpression [to typeof(Typename)] [, [Name =] ArrayExpression [to typeof(Typename)] ...] [limit Rowlimit]|mv-expand

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

매개 변수

이름 Type 필수 설명
ColumnName, ArrayExpression string ✔️ 열 참조 또는 배열 또는 속성 모음을 포함하는 형식 dynamic 값이 있는 스칼라 식입니다. 배열 또는 속성 모음의 개별 최상위 요소는 여러 레코드로 확장됩니다.
ArrayExpression을 사용하고 Name이 입력 열 이름과 같지 않으면 확장된 값이 출력의 새 열로 확장됩니다. 그렇지 않으면 기존 ColumnName 이 대체됩니다.
이름 string 새 열의 이름입니다.
Typename string ✔️ 연산자가 생성하는 열의 형식이 되는 배열 요소의 기본 형식을 mv-expand 나타냅니다. 형식 적용 작업은 캐스트 전용이며, 구문 분석 또는 형식 변환을 포함하지 않습니다. 선언된 형식을 준수하지 않는 배열 요소는 값이 됩니다 null .
RowLimit int 각 원래 행에서 생성된 최대 행 수입니다. 기본값은 2147483647. mvexpandmv-expand 연산자의 레거시 형식 및 사용되지 않는 형식입니다. 레거시 버전의 기본 행 제한은 128입니다.
IndexColumnName string 지정된 경우 with_itemindex 출력에는 원래 확장된 컬렉션에 있는 항목의 0부터 시작하는 인덱스가 포함된 IndexColumnName이라는 다른 열이 포함됩니다.

반품

입력의 각 레코드에 대해 연산자는 다음과 같은 방식으로 결정된 대로 0개, 1개 또는 많은 레코드를 출력에 반환합니다.

  1. 확장되지 않은 입력 열은 출력에 원래 값으로 표시됩니다. 단일 입력 레코드가 여러 출력 레코드로 확장되면 값이 모든 레코드에 중복됩니다.

  2. 확장되는 각 ColumnName 또는 ArrayExpression에 대해 확장 모드에서 설명한 대로 각 값에 대해 출력 레코드 수가 결정됩니다. 각 입력 레코드에 대해 최대 출력 레코드 수가 계산됩니다. 모든 배열 또는 속성 모음이 "병렬"로 확장되어 누락된 값(있는 경우)은 null 값으로 대체됩니다. 요소는 원래 배열/모음에 표시되는 순서대로 행으로 확장됩니다.

  3. 동적 값이 null이면 해당 값(null)에 대해 단일 레코드가 생성됩니다. 동적 값이 빈 배열 또는 속성 모음인 경우 해당 값에 대한 레코드가 생성되지 않습니다. 그렇지 않으면, 동적 값에 요소가 있으므로 많은 레코드가 생성됩니다.

확장된 열은 절을 사용하여 명시적으로 형식화되지 않는 한 형식 dynamic입니다 to typeof() .

확장 모드

속성 모음 확장의 두 가지 모드가 지원됩니다.

  • kind=bag 또는 bagexpansion=bag: 속성 모음이 단일 항목 속성 모음으로 확장됩니다. 이 모드가 기본 모드입니다.
  • kind=array또는 bagexpansion=array: 속성 모음이 2개 요소 [,] 배열 구조로 확장되어 키와 값에 균일하게 액세스할 수 있습니다. 이 모드에서는 예를 들어 속성 이름에 대한 고유 개수 집계를 실행할 수도 있습니다.

예제

단일 열 - 배열 확장

datatable (a: int, b: dynamic)
[
    1, dynamic([10, 20]),
    2, dynamic(['a', 'b'])
]
| mv-expand b

출력

a b
1 10
1 20
2 a
2 b

단일 열 - 모음 확장

단일 열의 간단한 확장:

datatable (a: int, b: dynamic)
[
    1, dynamic({"prop1": "a1", "prop2": "b1"}),
    2, dynamic({"prop1": "a2", "prop2": "b2"})
]
| mv-expand b

출력

a b
1 {"prop1": "a1"}
1 {"prop2": "b1"}
2 {"prop1": "a2"}
2 {"prop2": "b2"}

단일 열 - 키-값 쌍으로 모음 확장

키-값 쌍으로 간단한 모음 확장:

datatable (a: int, b: dynamic)
[
    1, dynamic({"prop1": "a1", "prop2": "b1"}),
    2, dynamic({"prop1": "a2", "prop2": "b2"})
]
| mv-expand kind=array b 
| extend key = b[0], val=b[1]

출력

a b key val
1 ["prop1","a1"] prop1 a1
1 ["prop2","b1"] prop2 b1
2 ["prop1","a2"] prop1 a2
2 ["prop2","b2"] prop2 b2

두 개의 열 압축

두 열을 확장하면 먼저 해당 열을 'zip'한 다음 확장합니다.

datatable (a: int, b: dynamic, c: dynamic)[
    1, dynamic({"prop1": "a", "prop2": "b"}), dynamic([5, 4, 3])
]
| mv-expand b, c

출력

a b c
1 {"prop1":"a"} 5
1 {"prop2":"b"} 4
1 3

두 열의 데카르트 곱

두 열을 확장하는 카티전 곱을 가져오려면 다음 열을 차례로 확장합니다.

datatable (a: int, b: dynamic, c: dynamic)
[
    1, dynamic({"prop1": "a", "prop2": "b"}), dynamic([5, 6])
]
| mv-expand b
| mv-expand c

출력

a b c
1 { "prop1": "a"} 5
1 { "prop1": "a"} 6
1 { "prop2": "b"} 5
1 { "prop2": "b"} 6

출력 변환

mv-expand의 출력을 특정 형식(기본값은 동적)으로 강제 적용하려면 다음을 사용합니다 to typeof.

datatable (a: string, b: dynamic, c: dynamic)[
    "Constant", dynamic([1, 2, 3, 4]), dynamic([6, 7, 8, 9])
]
| mv-expand b, c to typeof(int)
| getschema 

출력

ColumnName ColumnOrdinal DateType ColumnType
a 0 System.String string
b 1 System.Object dynamic
c 2 System.Int32 int

참고 열 b 은 다음과 c 같이 dynamic 반환int됩니다.

With_itemindex 사용

다음을 사용하여 배열 with_itemindex확장:

range x from 1 to 4 step 1
| summarize x = make_list(x)
| mv-expand with_itemindex=Index x

출력

x Index
1 0
2 1
3 2
4 3
  • mv-apply 연산자.
  • mv-expand 연산자의 반대는 요약 make_list()를 참조하세요.
  • 속성 모음 키를 사용하여 동적 JSON 개체를 열로 확장하려면 bag_unpack() 플러그 인을 참조하세요.