다음을 통해 공유


bag_unpack 플러그 인

적용 대상: ✅Microsoft Fabric✅Azure Data Explorer

플러그 인은 bag_unpack 각 속성 모음 최상위 슬롯을 열로 처리하여 단일 형식 dynamic열의 압축을 풉니다. 플러그 인은 연산자를 사용하여 호출됩니다 evaluate .

구문

T|evaluatebag_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에서 와일드카드 * 를 사용합니다.

테이블 형식 스키마 규칙은 입력 데이터에 적용됩니다. 특히 다음 사항에 주의하십시오.

플러그 인은 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 동적 열이 포함됩니다.

고객 속성 열이 강조 표시된 SalesDynamic 테이블의 스크린샷

  • 출력 스키마가 없는 예제: 첫 번째 쿼리는 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
... ... ...