partition 演算子
適用対象: ✅Microsoft Fabric✅Azure データ エクスプローラー✅Azure Monitor✅Microsoft Sentinel
パーティション演算子は、キー列の値に従って、入力テーブルのレコードを複数のサブテーブルに分割します。 演算子は、各サブテーブルに対してサブクエリを実行し、すべてのサブクエリの結果の和集合である単一の出力テーブルを生成します。
この演算子は、同じパーティション キーに属する行のサブセットに対してのみサブクエリを実行する必要があり、データセット全体に対してクエリを実行しない場合に便利です。 これらのサブクエリには、集計関数、ウィンドウ関数、top N などがあります。
partition 演算子は、サブクエリ操作のいくつかの方法をサポートしています。
- ネイティブ - 何千ものキーパーティション値を持つ暗黙的なデータソースと共に使用します。
- シャッフル - 何百万ものキーパーティション値を持つ暗黙的なソースと共に使用します。
- レガシ - 64以下のキーパーティション値に対して、暗黙的または明示的なソースと共に使用します。
構文
T |
partition
[ hint.strategy=
Strategy ] [ Hints ] by
Column (
TransformationSubQuery )
T |
partition
[ hint.strategy=legacy
] [ Hints ] by
Column {
SubQueryWithSource }
構文規則について詳しく知る。
パラメーター
件名 | タイプ | Required | 説明 |
---|---|---|---|
T | string |
✔️ | 入力表形式のソース。 |
戦略 | string |
値 legacy 、 shuffle 、または native 。 このヒントは、パーティション演算子の実行戦略を定義します。戦略が指定されていない場合は、 legacy 戦略が使用されます。 詳細については、「 Strategies」を参照してください。 |
|
列 | string |
✔️ | 入力テーブル ソースのパーティション分割方法を決定する値を持つ T の列の名前。 |
TransformationSubQuery | string |
✔️ | 表形式の変換式。 ソースは暗黙的に、 T のレコードをパーティション分割することによって生成されるサブテーブルです。各サブテーブルは、 Column の値に同種です。 式は表形式の結果を 1 つだけ提供する必要があり、他の種類のステートメント ( let ステートメントなど) を含めることはできません。 |
SubQueryWithSource | string |
✔️ | テーブル参照など、独自の表形式ソースを含む表形式の式。 この構文は、 legacy 戦略でのみサポートされます。 サブクエリは、キー列 ( Column) のみを T から参照できます。列を参照するには、構文 toscalar( Column) を使用します。式は表形式の結果を 1 つだけ提供する必要があり、他の種類のステートメント ( let ステートメントなど) を含めることはできません。 |
[ヒント] | string |
演算子の動作を制御する 0 個以上のスペース区切りパラメーター ( HintName = Value の形式。 戦略の種類ごとに サポートされているヒント を参照してください。 |
サポートされているヒント
ヒント名 | Type | 戦略 | 説明 |
---|---|---|---|
hint.shufflekey |
string |
shuffle | shuffle 戦略でパーティション演算子を実行するために使用されるパーティション キー。 |
hint.materialized |
bool |
遺産 | true に設定されている場合、partition 演算子のソースを具体化します。 既定値は false です。 |
hint.concurrency |
int |
遺産 | 並列で実行するパーティションの数を決定します。 既定値は 16 です。 |
hint.spread |
int |
遺産 | クラスター ノード間でパーティションを分散する方法を決定します。 既定値は 1 です。たとえば、N パーティションがあり、スプレッド ヒントが P に設定されている場合、N パーティションは、コンカレンシー ヒントに応じて異なるクラスター ノードP によって均等に/順番に処理されます。 |
返品
演算子は、個々のサブクエリの結果の和集合を返します。
方法
パーティション演算子は、サブクエリ操作のいくつかの戦略 ( native、 shuffle、および legacy をサポートしています。
Note
native
戦略とshuffle
戦略の区別により、呼び出し元はサブクエリのカーディナリティと実行戦略を示すことができます。 この選択は、サブクエリの完了にかかる時間に影響する可能性がありますが、最終的な結果は変更されません。
ネイティブ戦略
この戦略は、パーティション キーの個別の値の数が大きく、ほぼ数千の場合に適用する必要があります。
サブクエリは、表形式のソースを指定しない表形式の変換である必要があります。 ソースは暗黙的であり、サブテーブルのパーティションに従って割り当てられます。 サブクエリでは、特定の サポートされている演算子 のみを使用できます。 パーティションの数に制限はありません。
この戦略を使用するには、 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
- scan
- 検索
- serialize
- sort
- summarize
- take
- top
- top-hitters
- top-nested
- where
Note
- サブテーブル パーティション以外のテーブル ソースを参照する演算子は、
native
およびshuffle
戦略と互換性がありません。 たとえば、 join、 union、 externaldata、 evaluate (プラグイン) などです。 このようなシナリオでは、 legacy 戦略に頼。 - サブクエリは単一の表形式の結果を返す必要があります。 fork 演算子は、どの戦略の種類でもサポートされていません。
レガシ戦略
歴史的な理由から、 legacy
戦略が既定の戦略です。 ただし、legacy
アプローチは 64 個のパーティションに制限されており、効率が低いまたはシャッフレ戦略を優先することをお勧めします。
一部のシナリオでは、サブクエリに表形式のソースを含めるために、 legacy
戦略が必要になる場合があります。 このような場合、サブクエリは、入力表形式のソースである T からキー列 (Column) のみを参照できます。列を参照するには、構文 toscalar(
Column)
を使用します。
サブクエリが表形式のソースを持たない表形式の変換である場合、ソースは暗黙的であり、サブテーブル パーティションに基づいています。
この戦略を使用するには、 hint.strategy=legacy
を指定するか、他の戦略指示を省略します。
Note
パーティション列 Column に 64 を超える個別の値が含まれている場合、エラーが発生します。
例
上位の値を検索する
場合によっては、top-nested
演算子を使用するよりも、partition
演算子を使用した方がパフォーマンスが高く、クエリを記述する方が簡単です。 次のクエリは、"WYOMING"、"WASHINGTON"、"WEST VIRGINIA"、"VIRGINIA"、"VIRGINIA" というW
で始まる各State
のsummarize
と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 | 都道府県 | Events | けが |
---|---|---|---|
ひょう | WYOMING | 108 | 0 |
High Wind | WYOMING | 81 | 5 |
Winter Storm | WYOMING | 72 | 0 |
大雪 | WASHINGTON | 82 | 0 |
High Wind | WASHINGTON | 58 | 13 |
Wildfire | WASHINGTON | 29 | 0 |
雷雨風 | WEST VIRGINIA | 180 | 1 |
ひょう | WEST VIRGINIA | 103 | 0 |
冬の天気 | WEST VIRGINIA | 88 | 0 |
雷雨風 | WISCONSIN | 416 | 1 |
Winter Storm | WISCONSIN | 310 | 0 |
ひょう | WISCONSIN | 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 |
---|---|
Tornado | 4 |
ひょう | 1 |
雷雨風 | 1 |
過剰な熱 | 0 |
High Wind | 13 |
Lightning | 5 |
High Wind | 5 |
雪崩 | 3 |
シャッフル戦略
次のクエリでは、EpisodeId
の上位 3 つのDamagedProperty
値と、EpisodeId
およびState
列が返されます。
StormEvents
| partition hint.strategy=shuffle by EpisodeId
(
top 3 by DamageProperty
| project EpisodeId, State, DamageProperty
)
| count
出力
カウント |
---|
22345 |
明示的なソースを使用したレガシ戦略
次のクエリでは、2 つのサブクエリが実行されます。
x == 1
すると、クエリはInjuriesIndirect == 1
を持つStormEvents
からすべての行を返します。x == 2
すると、クエリはInjuriesIndirect == 2
を持つStormEvents
からすべての行を返します。
最終的な結果は、これら 2 つのサブクエリの和集合です。
range x from 1 to 2 step 1
| partition hint.strategy=legacy by x {StormEvents | where x == InjuriesIndirect}
| count
出力
カウント |
---|
113 |
パーティションリファレンス
次の例は、as 演算子を使用して各データ パーティションに "name"を指定し、サブクエリ内でその名前を再利用する方法を示しています。 このアプローチは、 legacy
戦略にのみ関連します。
T
| partition by Dim
(
as Partition
| extend MetricPct = Metric * 100.0 / toscalar(Partition | summarize sum(Metric))
)