partition 연산자
적용 대상: ✅Microsoft Fabric✅Azure Data Explorer✅Azure Monitor✅Microsoft Sentinel
파티션 연산자는 키 열의 값에 따라 입력 테이블의 레코드를 여러 하위 테이블로 분할합니다. 연산자는 각 하위 테이블에 대해 하위 쿼리를 실행하고 모든 하위 쿼리의 결과 통합인 단일 출력 테이블을 생성합니다.
이 연산자는 동일한 파티션 키에 속하는 행의 하위 집합에서만 하위 쿼리를 수행하고 전체 데이터 세트를 쿼리하지 않는 경우에 유용합니다. 이러한 하위 쿼리에는 집계 함수, 창 함수, 상위 N 개 등이 포함될 수 있습니다.
파티션 연산자는 하위 쿼리 작업의 몇 가지 전략을 지원합니다.
- 네이티브 - 수천 개 키 파티션 값이 있는 암시적 데이터 원본과 함께 사용합니다.
- 순서 섞기 - 수백만 개의 키 파티션 값이 있는 암시적 원본과 함께 사용합니다.
- 레거시 - 64개 이하의 키 파티션 값에 암시적 또는 명시적 원본과 함께 사용합니다.
구문
T |
partition
[ hint.strategy=
전략 ] [ 힌트 ] by
열 (
변환SubQuery )
T partition
|
[ hint.strategy=legacy
] [ 힌트 ] by
Column {
SubQueryWithSource }
구문 규칙에 대해 자세히 알아봅니다.
매개 변수
이름 | Type | 필수 | 설명 |
---|---|---|---|
T | string |
✔️ | 입력 테이블 형식 원본입니다. |
전략 | string |
값 legacy 또는 shuffle native . 이 힌트는 파티션 연산자의 실행 전략을 정의합니다.전략이 지정되지 legacy 않은 경우 전략이 사용됩니다. 자세한 내용은 전략을 참조하세요. |
|
열 | string |
✔️ | 값이 입력 테이블 형식 원본을 분할하는 방법을 결정하는 T의 열 이름입니다. |
TransformationSubQuery | string |
✔️ | 테이블 형식 변환 식입니다. 원본은 암시적으로 T의 레코드를 분할하여 생성되는 하위 테이블입니다. 각 하위 개체는 열 값에 대해 균일합니다. 식은 하나의 테이블 형식 결과만 제공해야 하며 문과 같은 let 다른 형식의 문이 없어야 합니다. |
SubQueryWithSource | string |
✔️ | 테이블 참조와 같은 자체 테이블 형식 원본을 포함하는 테이블 형식 식입니다. 이 구문은 레거시 전략에서 만 지원됩니다. 하위 쿼리는 T에서 키 열인 열만 참조할 수 있습니다. 열을 참조하려면 구문 toscalar( 열을) 사용합니다.식은 하나의 테이블 형식 결과만 제공해야 하며 문과 같은 let 다른 형식의 문이 없어야 합니다. |
힌트 | string |
연산자의 동작을 제어하는 HintName = 값 형식의 공백으로 구분된 매개 변수가 0개 이상입니다. 전략 유형별로 지원되는 힌트를 참조하세요. |
지원되는 힌트
힌트 이름 | Type | 전략 | 설명 |
---|---|---|---|
hint.shufflekey |
string |
shuffle | 전략을 사용하여 파티션 연산 shuffle 자를 실행하는 데 사용되는 파티션 키입니다. |
hint.materialized |
bool |
유산 | 로 true 설정하면 연산자의 원본이 partition 구체화됩니다. 기본값은 false 입니다. |
hint.concurrency |
int |
유산 | 병렬로 실행할 파티션 수를 결정합니다. 기본값은 16 입니다. |
hint.spread |
int |
유산 | 클러스터 노드 간에 파티션을 배포하는 방법을 결정합니다. 기본값은 1 입니다.예를 들어 N 파티션이 있고 분산 힌트가 P로 설정된 경우 N 파티션은 동시성 힌트에 따라 P 다른 클러스터 노드에서 병렬/순차적으로 동일하게 처리됩니다. |
반품
연산자는 개별 하위 쿼리 결과의 합을 반환합니다.
전략
파티션 연산자는 네이티브, 순서 섞기 및 레거시와 같은 여러 하위 쿼리 작업 전략을 지원합니다.
참고 항목
호출자는 전략과 shuffle
전략을 구분 native
하여 하위 쿼리의 카디널리티 및 실행 전략을 나타낼 수 있습니다. 이 선택은 하위 쿼리를 완료하는 데 걸리는 시간에 영향을 줄 수 있지만 최종 결과는 변경되지 않습니다.
네이티브 전략
이 전략은 파티션 키의 고유 값 수가 크지 않은 경우(대략 수천 개) 적용해야 합니다.
하위 쿼리는 테이블 형식 소스를 지정하지 않는 테이블 형식 변환이어야 합니다. 원본은 암시적이며 하위 테이블 파티션에 따라 할당됩니다. 하위 쿼리에서 지원되는 특정 연산 자만 사용할 수 있습니다. 파티션 수에는 제한이 없습니다.
이 전략을 사용하려면 .를 지정합니다 hint.strategy=native
.
순서 섞기 전략
파티션 키의 고유 값 수가 수백만 개인 경우 이 전략을 적용해야 합니다.
하위 쿼리는 테이블 형식 소스를 지정하지 않는 테이블 형식 변환이어야 합니다. 원본은 암시적이며 하위 테이블 파티션에 따라 할당됩니다. 하위 쿼리에서 지원되는 특정 연산 자만 사용할 수 있습니다. 파티션 수에는 제한이 없습니다.
이 전략을 사용하려면 .를 지정합니다 hint.strategy=shuffle
. 순서 섞기 전략 및 성능에 대한 자세한 내용은 순서 섞기 쿼리를 참조하세요.
네이티브 및 순서 섞기 전략에 지원되는 연산자
다음 연산자 목록은 네이티브 또는 순서 섞기 전략을 사용하여 하위 쿼리에서 사용할 수 있습니다.
- count
- distinct
- extend
- make-series
- mv-apply
- mv-expand
- parse
- parse-where
- project
- project-away
- project-keep
- project-rename
- project-reorder
- reduce
- sample
- sample-distinct
- 스캔하다
- search
- serialize
- sort
- summarize
- take
- top
- 최고 타자
- 맨 위 중첩
- where
참고 항목
- 하위 테이블 파티션 이외의 테이블 원본을 참조하는 연산자는 및 전략과
native
shuffle
호환되지 않습니다. 예를 들어 조인, 공용 구조체, externaldata 및 평가(플러그 인)입니다. 이러한 시나리오의 경우 레거시 전략에 의존 합니다. - 하위 쿼리는 단일 테이블 형식 결과를 반환해야 하므로 포크 연산자는 전략 형식에 대해 지원되지 않습니다.
레거시 전략
역사적 이유로 이 legacy
전략은 기본 전략입니다. 그러나 접근 방식이 64개의 파티션으로 제한되고 효율성이 낮기 때문에 legacy
네이티브 또는 순서 섞기 전략을 선호하는 것이 좋습니다.
일부 시나리오에서는 하위 쿼리에 legacy
테이블 형식 소스를 포함하도록 지원하기 때문에 전략이 필요할 수 있습니다. 이러한 경우 하위 쿼리는 입력 테이블 형식 원본 T에서 키 열인 열만 참조할 수 있습니다. 열을 참조하려면 구문 toscalar(
열을)
사용합니다.
하위 쿼리가 테이블 형식 원본이 없는 테이블 형식 변환인 경우 원본은 암시적이며 하위 테이블 파티션을 기반으로 합니다.
이 전략을 사용하려면 다른 전략 표시를 지정 hint.strategy=legacy
하거나 생략합니다.
참고 항목
파티션 열 열에 64개 이상의 고유 값이 포함된 경우 오류가 발생합니다.
예제
상위 값 찾기
경우에 따라 연산자를 사용하는 top-nested
것보다 연산자를 사용하여 partition
쿼리를 작성하는 것이 더 성능이 높고 더 쉽습니다. 다음 쿼리는 하위 쿼리 계산 summarize
을 실행하고 각각 State
"WYOMING", "WASHINGTON", "WEST VIRGINIA" 및 "WISCONSIN"로 시작 W
top
합니다.
StormEvents
| where State startswith 'W'
| partition hint.strategy=native by State
(
summarize Events=count(), Injuries=sum(InjuriesDirect) by EventType, State
| top 3 by Events
)
출력
EventType | State(상태) | 이벤트 | Injuries |
---|---|---|---|
Hail | WYOMING | 108 | 0 |
강풍 | WYOMING | 81 | 5 |
겨울 폭풍 | WYOMING | 72 | 0 |
폭설 | WASHINGTON | 82 | 0 |
강풍 | WASHINGTON | 58 | 13 |
Wildfire | WASHINGTON | 29 | 0 |
뇌우를 동반한 바람 | WEST VIRGINIA | 180 | 1 |
Hail | WEST VIRGINIA | 103 | 0 |
겨울 날씨 | WEST VIRGINIA | 88 | 0 |
뇌우를 동반한 바람 | 위스콘신주 | 416 | 1 |
겨울 폭풍 | 위스콘신주 | 310 | 0 |
Hail | 위스콘신주 | 303 | 1 |
네이티브 전략
다음 쿼리는 'W'로 시작하는 각 State
값에 TotalInjuries
대한 상위 2 EventType
개 값을 반환합니다.
StormEvents
| where State startswith 'W'
| partition hint.strategy = native by State
(
summarize TotalInjueries = sum(InjuriesDirect) by EventType
| top 2 by TotalInjueries
)
출력
EventType | TotalInjueries |
---|---|
토네이도 | 4 |
Hail | 1 |
뇌우를 동반한 바람 | 1 |
Excessive Heat | 0 |
강풍 | 13 |
Lightning | 5 |
강풍 | 5 |
눈사태 | 3 |
순서 섞기 전략
다음 쿼리는 상위 3 DamagedProperty
개 값 foreach EpisodeId
와 열 및 EpisodeId
State
.
StormEvents
| partition hint.strategy=shuffle by EpisodeId
(
top 3 by DamageProperty
| project EpisodeId, State, DamageProperty
)
| count
출력
Count |
---|
22345 |
명시적 원본을 사용하여 레거시 전략
다음 쿼리는 두 개의 하위 쿼리를 실행합니다.
- 이 경우
x == 1
쿼리는 해당InjuriesIndirect == 1
행의 모든 행을 반환합니다StormEvents
. - 이 경우
x == 2
쿼리는 해당InjuriesIndirect == 2
행의 모든 행을 반환합니다StormEvents
.
최종 결과는 이 두 하위 쿼리의 합합입니다.
range x from 1 to 2 step 1
| partition hint.strategy=legacy by x {StormEvents | where x == InjuriesIndirect}
| count
출력
Count |
---|
113 |
파티션 참조
다음 예제에서는 as 연산자를 사용하여 각 데이터 파티션에 "이름"을 지정한 다음 하위 쿼리 내에서 해당 이름을 다시 사용하는 방법을 보여 줍니다. 이 방법은 전략과 legacy
만 관련이 있습니다.
T
| partition by Dim
(
as Partition
| extend MetricPct = Metric * 100.0 / toscalar(Partition | summarize sum(Metric))
)