次の方法で共有


partition 演算子

適用対象: ✅Microsoft FabricAzure データ エクスプローラーAzure MonitorMicrosoft 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 legacyshuffle、または 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 によって均等に/順番に処理されます。

返品

演算子は、個々のサブクエリの結果の和集合を返します。

方法

パーティション演算子は、サブクエリ操作のいくつかの戦略 ( nativeshuffle、および legacy をサポートしています。

Note

native戦略とshuffle戦略の区別により、呼び出し元はサブクエリのカーディナリティと実行戦略を示すことができます。 この選択は、サブクエリの完了にかかる時間に影響する可能性がありますが、最終的な結果は変更されません。

ネイティブ戦略

この戦略は、パーティション キーの個別の値の数が大きく、ほぼ数千の場合に適用する必要があります。

サブクエリは、表形式のソースを指定しない表形式の変換である必要があります。 ソースは暗黙的であり、サブテーブルのパーティションに従って割り当てられます。 サブクエリでは、特定の サポートされている演算子 のみを使用できます。 パーティションの数に制限はありません。

この戦略を使用するには、 hint.strategy=nativeを指定します。

シャッフル戦略

この戦略は、パーティション キーの個別の値の数が数百万単位で大きい場合に適用する必要があります。

サブクエリは、表形式のソースを指定しない表形式の変換である必要があります。 ソースは暗黙的であり、サブテーブルのパーティションに従って割り当てられます。 サブクエリでは、特定の サポートされている演算子 のみを使用できます。 パーティションの数に制限はありません。

この戦略を使用するには、 hint.strategy=shuffleを指定します。 シャッフル戦略とパフォーマンスの詳細については、 シャッフル クエリを参照してください。

ネイティブおよびシャッフル戦略でサポートされている演算子

次の演算子の一覧は、ネイティブまたはシャッフル戦略を使用してサブクエリで使用できます。

Note

  • サブテーブル パーティション以外のテーブル ソースを参照する演算子は、 native および shuffle 戦略と互換性がありません。 たとえば、 joinunionexternaldataevaluate (プラグイン) などです。 このようなシナリオでは、 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で始まる各Statesummarizetopを計算するサブクエリを実行します。

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