적용 대상: ✅Microsoft Fabric✅Azure Data Explorer
플러그 인은 bag_unpack
각 속성 모음 최상위 슬롯을 열로 처리하여 단일 형식 dynamic
열의 압축을 풉니다. 플러그 인은 연산자를 사용하여 호출됩니다 evaluate
.
구문
T|
evaluate
bag_unpack(
Column [,
OutputColumnPrefix ] [,
columnsConflict ] [,
ignoredProperties ] )
[:
OutputSchema]
구문 규칙에 대해 자세히 알아봅니다.
매개 변수
이름 | 유형 | 필수 | 설명 |
---|---|---|---|
T | string |
✔️ | 열 의 압축을 풀려는 테이블 형식 입력입니다. |
열 | dynamic |
✔️ | 압축을 풀 T의 열입니다. |
OutputColumnPrefix | string |
플러그 인에서 생성하는 모든 열에 추가할 공통 접두사입니다. | |
columnsConflict | string |
열 충돌 해결 방향입니다. 유효한 값: error - 쿼리에서 오류를 생성합니다(기본값).replace_source - 원본 열이 대체됨keep_source - 원본 열이 유지됩니다. |
|
ignoredProperties | dynamic |
무시할 모음 속성의 선택적 집합입니다. } | |
OutputSchema | 플러그 인 출력에 대한 열 이름 및 형식을 bag_unpack 지정합니다. 구문 정보는 출력 스키마 구문을 참조하고 그 의미를 이해하려면 성능 고려 사항을 참조하세요. |
출력 스키마 구문
(
ColumnName:
ColumnType [,
...])
다음과 같이 와일드카드 *
를 첫 번째 매개 변수로 사용하여 원본 테이블의 모든 열을 출력에 포함합니다.
(
*
,
ColumnName:
ColumnType [,
...])
성능 고려 사항
OutputSchema 없이 플러그 인을 사용하면 큰 데이터 세트에 심각한 성능 영향을 미칠 수 있으므로 피해야 합니다.
OutputSchema를 제공하면 쿼리 엔진이 입력 데이터를 구문 분석하고 분석할 필요 없이 출력 스키마를 결정할 수 있으므로 쿼리 실행을 최적화할 수 있습니다. 이는 입력 데이터가 크거나 복잡한 경우에 유용합니다. 정의된 OutputSchema와 함께 또는 사용하지 않고 플러그 인을 사용하는 경우 성능에 영향을 미치는 예제를 참조하세요.
반품
플러그 인은 bag_unpack
테이블 형식 입력(T)만큼의 레코드가 있는 테이블을 반환합니다. 테이블의 스키마는 다음과 같이 수정된 테이블 형식 입력의 스키마와 동일합니다.
- 지정된 입력 열(열)이 제거됩니다.
- 각 열의 이름은 각 슬롯의 이름에 해당하며, 선택적으로 OutputColumnPrefix 앞에 추가됩니다.
- 각 열의 형식은 동일한 슬롯의 모든 값에 동일한 형식이 있는 경우 또는 값이 형식이 다른 경우 슬롯의 형식
dynamic
입니다. - 스키마는 T의 최상위 속성 모음 값에 고유 슬롯이 있는 만큼 많은 열로 확장됩니다.
참고 항목
- OutputSchema를 지정하지 않으면 플러그 인 출력 스키마는 입력 데이터 값에 따라 달라집니다. 서로 다른 데이터 입력을 사용하여 플러그 인을 여러 개 실행하면 다른 출력 스키마를 생성할 수 있습니다.
-
OutputSchema를 지정하면 와일드카드
*
를 사용하지 않는 한 플러그 인은 출력 스키마 구문에 정의된 열만 반환합니다. - 입력 데이터의 모든 열과 OutputSchema에 정의된 열을 반환하려면 OutputSchema에서 와일드카드
*
를 사용합니다.
테이블 형식 스키마 규칙은 입력 데이터에 적용됩니다. 특히 다음 사항에 주의하십시오.
- 출력 열 이름은 압축을 풀 열(열)이 아니면 테이블 형식 입력 T의 기존 열과 같을 수 없습니다. 그렇지 않으면 출력에 이름이 같은 두 개의 열이 포함됩니다.
- OutputColumnPrefix 접두사로 사용되는 모든 슬롯 이름은 유효한 엔터티 이름이어야 하며 식별자 명명 규칙을 따라야 합니다.
플러그 인은 null 값을 무시합니다.
예제
이 섹션의 예제에서는 구문을 사용하여 시작하는 방법을 보여 줍니다.
모음을 확장합니다.
datatable(d:dynamic)
[
dynamic({"Name": "John", "Age":20}),
dynamic({"Name": "Dave", "Age":40}),
dynamic({"Name": "Jasmine", "Age":30}),
]
| evaluate bag_unpack(d)
출력
나이 | 이름 |
---|---|
20 | John |
40 | 데이브 |
30 | 재 스민 |
모음을 확장하고 접두사를 사용하여 열 이름을 생성하는 옵션을 사용합니다OutputColumnPrefix
.
datatable(d:dynamic)
[
dynamic({"Name": "John", "Age":20}),
dynamic({"Name": "Dave", "Age":40}),
dynamic({"Name": "Jasmine", "Age":30}),
]
| evaluate bag_unpack(d, 'Property_')
출력
Property_Age | Property_Name |
---|---|
20 | John |
40 | 데이브 |
30 | 재 스민 |
모음을 확장하고 이 columnsConflict
옵션을 사용하여 동적 열과 기존 열 간의 열 충돌을 해결합니다.
datatable(Name:string, d:dynamic)
[
'Old_name', dynamic({"Name": "John", "Age":20}),
'Old_name', dynamic({"Name": "Dave", "Age":40}),
'Old_name', dynamic({"Name": "Jasmine", "Age":30}),
]
| evaluate bag_unpack(d, columnsConflict='replace_source') // Use new name
출력
나이 | 이름 |
---|---|
20 | John |
40 | 데이브 |
30 | 재 스민 |
datatable(Name:string, d:dynamic)
[
'Old_name', dynamic({"Name": "John", "Age":20}),
'Old_name', dynamic({"Name": "Dave", "Age":40}),
'Old_name', dynamic({"Name": "Jasmine", "Age":30}),
]
| evaluate bag_unpack(d, columnsConflict='keep_source') // Keep old name
출력
나이 | 이름 |
---|---|
20 | Old_name |
40 | Old_name |
30 | Old_name |
모음을 확장하고 이 옵션을 사용하여 ignoredProperties
속성 모음에 있는 속성 중 2개는 무시합니다.
datatable(d:dynamic)
[
dynamic({"Name": "John", "Age":20, "Address": "Address-1" }),
dynamic({"Name": "Dave", "Age":40, "Address": "Address-2"}),
dynamic({"Name": "Jasmine", "Age":30, "Address": "Address-3"}),
]
// Ignore 'Age' and 'Address' properties
| evaluate bag_unpack(d, ignoredProperties=dynamic(['Address', 'Age']))
출력
이름 |
---|
John |
데이브 |
재 스민 |
모음을 확장하고 OutputSchema 옵션을 사용합니다.
datatable(d:dynamic)
[
dynamic({"Name": "John", "Age":20}),
dynamic({"Name": "Dave", "Age":40}),
dynamic({"Name": "Jasmine", "Age":30}),
]
| evaluate bag_unpack(d) : (Name:string, Age:long)
출력
이름 | 나이 |
---|---|
John | 20 |
데이브 | 40 |
재 스민 | 30 |
OutputSchema를 사용하여 모음을 확장하고 와일드카드 *
옵션을 사용합니다.
이 쿼리는 원래 슬롯 설명 및 OutputSchema에 정의된 열을 반환합니다.
datatable(d:dynamic, Description: string)
[
dynamic({"Name": "John", "Age":20, "height":180}), "Student",
dynamic({"Name": "Dave", "Age":40, "height":160}), "Teacher",
dynamic({"Name": "Jasmine", "Age":30, "height":172}), "Student",
]
| evaluate bag_unpack(d) : (*, Name:string, Age:long)
출력
설명 | 이름 | 나이 |
---|---|---|
학생 | John | 20 |
교사 | 데이브 | 40 |
학생 | 재 스민 | 30 |
성능에 영향을 미치는 예제
정의된 OutputSchema를 사용 또는 사용하지 않고 모음을 확장하여 성능에 미치는 영향을 비교합니다.
이 예제에서는 도움말 클러스터에서 공개적으로 사용 가능한 테이블을 사용합니다. ContosoSales 데이터베이스에는 SalesDynamic이라는 테이블이 있습니다. 테이블에는 판매 데이터가 포함되며 Customer_Properties 동적 열이 포함됩니다.
출력 스키마가 없는 예제: 첫 번째 쿼리는 OutputSchema를 정의하지 않습니다. 쿼리는 CPU 5.84 초가 걸리고 36.39MB 의 데이터를 검색합니다.
SalesDynamic | evaluate bag_unpack(Customer_Properties) | summarize Sales=sum(SalesAmount) by Country, State
출력 스키마를 사용하는 예제: 두 번째 쿼리는 OutputSchema를 제공합니다. 쿼리는 0.45 초의 CPU를 사용하고 19.31MB 의 데이터를 검색합니다. 쿼리는 입력 테이블을 분석할 필요가 없으므로 처리 시간을 절약할 수 있습니다.
SalesDynamic | evaluate bag_unpack(Customer_Properties) : (*, Country:string, State:string, City:string) | summarize Sales=sum(SalesAmount) by Country, State
출력
출력은 두 쿼리에 대해 동일합니다. 출력의 처음 10개 행은 다음과 같습니다.
캐나다 | 브리티시컬럼비아 | 56,101,083 |
---|---|---|
영국 | 영국 | 77,288,747 |
오스트레일리아 | 빅토리아 | 31,242,423 |
오스트레일리아 | 퀸즐랜드 | 27,617,822 |
오스트레일리아 | 남호주 | 8,530,537 |
오스트레일리아 | 뉴사우스웨일즈 | 54,765,786 |
오스트레일리아 | 태즈메이니아 | 3,704,648 |
캐나다 | 앨버타 | 375,061 |
캐나다 | 온타리오 | 38,282 |
미국 | 워싱턴 | 80,544,870 |
... | ... | ... |
관련 콘텐츠
- parse_json 함수
- mv-expand 연산자