다음을 통해 공유


partition 연산자

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

파티션 연산자는 키 열의 값에 따라 입력 테이블의 레코드를 여러 하위 테이블로 분할합니다. 연산자는 각 하위 테이블에 대해 하위 쿼리를 실행하고 모든 하위 쿼리의 결과 통합인 단일 출력 테이블을 생성합니다.

이 연산자는 동일한 파티션 키에 속하는 행의 하위 집합에서만 하위 쿼리를 수행하고 전체 데이터 세트를 쿼리하지 않는 경우에 유용합니다. 이러한 하위 쿼리에는 집계 함수, 창 함수, 상위 N 개 등이 포함될 수 있습니다.

파티션 연산자는 하위 쿼리 작업의 몇 가지 전략을 지원합니다.

  • 네이티브 - 수천 개 키 파티션 값이 있는 암시적 데이터 원본과 함께 사용합니다.
  • 순서 섞기 - 수백만 개의 키 파티션 값이 있는 암시적 원본과 함께 사용합니다.
  • 레거시 - 64개 이하의 키 파티션 값에 암시적 또는 명시적 원본과 함께 사용합니다.

구문

T | partition [ hint.strategy=전략 ] [ 힌트 ] by( 변환SubQuery )

T partition | [ hint.strategy=legacy ] [ 힌트 ] by Column { SubQueryWithSource }

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

매개 변수

이름 Type 필수 설명
T string ✔️ 입력 테이블 형식 원본입니다.
전략 string legacy또는 shufflenative. 이 힌트는 파티션 연산자의 실행 전략을 정의합니다.

전략이 지정되지 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. 순서 섞기 전략 및 성능에 대한 자세한 내용은 순서 섞기 쿼리를 참조하세요.

네이티브 및 순서 섞기 전략에 지원되는 연산자

다음 연산자 목록은 네이티브 또는 순서 섞기 전략을 사용하여 하위 쿼리에서 사용할 수 있습니다.

참고 항목

레거시 전략

역사적 이유로 이 legacy 전략은 기본 전략입니다. 그러나 접근 방식이 64개의 파티션으로 제한되고 효율성이 낮기 때문에 legacy 네이티브 또는 순서 섞기 전략을 선호하는 것이 좋습니다.

일부 시나리오에서는 하위 쿼리에 legacy 테이블 형식 소스를 포함하도록 지원하기 때문에 전략이 필요할 수 있습니다. 이러한 경우 하위 쿼리는 입력 테이블 형식 원본 T에서 키 열인 만 참조할 수 있습니다. 열을 참조하려면 구문 toscalar(열을) 사용합니다.

하위 쿼리가 테이블 형식 원본이 없는 테이블 형식 변환인 경우 원본은 암시적이며 하위 테이블 파티션을 기반으로 합니다.

이 전략을 사용하려면 다른 전략 표시를 지정 hint.strategy=legacy 하거나 생략합니다.

참고 항목

파티션 열 열에 64개 이상의 고유 값이 포함된 경우 오류가 발생합니다.

예제

상위 값 찾기

경우에 따라 연산자를 사용하는 top-nested 것보다 연산자를 사용하여 partition 쿼리를 작성하는 것이 더 성능이 높고 더 쉽습니다. 다음 쿼리는 하위 쿼리 계산 summarize 을 실행하고 각각 State "WYOMING", "WASHINGTON", "WEST VIRGINIA" 및 "WISCONSIN"로 시작 Wtop 합니다.

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))
)