Dela via


partition operator

Applies to: ✅Microsoft FabricAzure Data ExplorerAzure MonitorMicrosoft Sentinel

Partitionsoperatorn partitionerar posterna i indatatabellen i flera undertabeller enligt värden i en nyckelkolumn. Operatorn kör en underfråga i varje undertabell och skapar en enda utdatatabell som är en union av resultaten för alla underfrågor.

Partitionsoperatorn är användbar när du bara behöver utföra en underfråga på en delmängd rader som tillhör samma partitionsnyckel och inte en fråga för hela datamängden. These subqueries could include aggregate functions, window functions, top N and others.

Partitionsoperatorn stöder flera strategier för underfrågor:

  • Native - use with an implicit data source with thousands of key partition values.
  • Shuffle - use with an implicit source with millions of key partition values.
  • Legacy - use with an implicit or explicit source for 64 or less key partition values.

Syntax

T|partition [ hint.strategy=Strategy ] [ Hints ] byColumn(TransformationSubQuery)

T|partition [ hint.strategy=legacy ] [ Hints ] byColumn{SubQueryWithSource}

Learn more about syntax conventions.

Parameters

Name Type Required Description
T string ✔️ Tabellkällan för indata.
Strategy string Värdet legacy, shuffleeller native. Det här tipset definierar partitionsoperatorns körningsstrategi.

Om ingen strategi anges används den legacy strategin. For more information, see Strategies.
Column string ✔️ The name of a column in T whose values determine how to partition the input tabular source.
TransformationSubQuery string ✔️ Ett tabelltransformeringsuttryck. The source is implicitly the subtables produced by partitioning the records of T. Each subtable is homogenous on the value of Column.

Uttrycket får bara ge ett tabellresultat och ska inte ha andra typer av instruktioner, till exempel let-instruktioner.
SubQueryWithSource string ✔️ Ett tabelluttryck som innehåller en egen tabellkälla, till exempel en tabellreferens. This syntax is only supported with the legacy strategy. The subquery can only reference the key column, Column, from T. To reference the column, use the syntax toscalar(Column).

Uttrycket får bara ge ett tabellresultat och ska inte ha andra typer av instruktioner, till exempel let-instruktioner.
Hints string Zero or more space-separated parameters in the form of: HintName=Value that control the behavior of the operator. See the supported hints per strategy type.

Supported hints

Hint name Type Strategy Description
hint.shufflekey string shuffle Partitionsnyckeln som används för att köra partitionsoperatorn med strategin shuffle.
hint.materialized bool legacy Om värdet är inställt på truematerialiserar källan för partition operatorn. Standardvärdet är false.
hint.concurrency int legacy Avgör hur många partitioner som ska köras parallellt. Standardvärdet är 16.
hint.spread int legacy Avgör hur partitionerna ska distribueras mellan klusternoder. Standardvärdet är 1.

For example, if there are N partitions and the spread hint is set to P, then the N partitions are processed by P different cluster nodes equally, in parallel/sequentially depending on the concurrency hint.

Returns

Operatorn returnerar en union av resultaten från de enskilda underfrågorna.

Strategies

The partition operator supports several strategies of subquery operation: native, shuffle, and legacy.

Note

Skillnaden mellan strategierna native och shuffle gör att anroparen kan ange kardinalitets- och körningsstrategin för underfrågan. Det här valet kan påverka hur lång tid underfrågan tar att slutföra men ändrar inte slutresultatet.

Native strategy

Den här strategin bör tillämpas när antalet distinkta värden för partitionsnyckeln inte är stort, ungefär i tusental.

Underfrågan måste vara en tabelltransformering som inte anger någon tabellkälla. Källan är implicit och tilldelas enligt undertabellpartitionerna. Only certain supported operators can be used in the subquery. Det finns ingen begränsning för antalet partitioner.

Om du vill använda den här strategin anger du hint.strategy=native.

Shuffle strategy

Den här strategin bör tillämpas när antalet distinkta värden för partitionsnyckeln är stort, i miljoner.

Underfrågan måste vara en tabelltransformering som inte anger någon tabellkälla. Källan är implicit och tilldelas enligt undertabellpartitionerna. Only certain supported operators can be used in the subquery. Det finns ingen begränsning för antalet partitioner.

Om du vill använda den här strategin anger du hint.strategy=shuffle. For more information about shuffle strategy and performance, see shuffle query.

Operatorer som stöds för interna strategier och shuffle-strategier

Följande lista över operatorer kan användas i underfrågor med inbyggda strategier eller shuffle-strategier:

Note

  • Operatorer som refererar till en annan tabellkälla än deltabellpartitionerna är inte kompatibla med strategierna native och shuffle. For example, join, union, externaldata, and evaluate (plugins). For such scenarios, resort to the legacy strategy.
  • The fork operator isn't supported for any strategy type, as the subquery must return a single tabular result.
  • The make-series operator is only partially supported within the partition by operator. Det stöds endast när både parametrarna from och to anges.

Legacy strategy

Av historiska skäl är den legacy strategin standardstrategin. However, we recommend favoring the native or shuffle strategies, as the legacy approach is limited to 64 partitions and is less efficient.

I vissa scenarier kan legacy strategi vara nödvändig på grund av dess stöd för att inkludera en tabellkälla i underfrågan. In such cases, the subquery can only reference the key column, Column, from the input tabular source, T. To reference the column, use the syntax toscalar(Column).

Om underfrågan är en tabelltransformering utan tabellkälla är källan implicit och baseras på partitionerna i undertabellen.

Om du vill använda den här strategin anger du hint.strategy=legacy eller utelämnar andra strategiindikatorer.

Note

An error occurs if the partition column, Column, contains more than 64 distinct values.

Examples

Exemplen i det här avsnittet visar hur du använder syntaxen för att komma igång.

The examples in this article use publicly available tables in the help cluster, such as the StormEvents table in the Samples database.

The examples in this article use publicly available tables, such as the Weather table in the Weather analytics sample gallery. Du kan behöva ändra tabellnamnet i exempelfrågan för att matcha tabellen på din arbetsyta.

Hitta de högsta värdena

I vissa fall är det mer högpresterande och enklare att skriva en fråga med operatorn partition än att använda operatorn top-nested. Följande fråga kör en underfråga som beräknar summarize och top för varje State som börjar med W: "WYOMING", "WASHINGTON", "WEST VIRGINIA" och "WISCONSIN".

StormEvents
| where State startswith 'W'
| partition hint.strategy=native by State 
    (
    summarize Events=count(), Injuries=sum(InjuriesDirect) by EventType, State
    | top 3 by Events 
    ) 

Output

EventType State Events Injuries
Hail WYOMING 108 0
High Wind WYOMING 81 5
Winter Storm WYOMING 72 0
Heavy Snow WASHINGTON 82 0
High Wind WASHINGTON 58 13
Wildfire WASHINGTON 29 0
Thunderstorm Wind WEST VIRGINIA 180 1
Hail WEST VIRGINIA 103 0
Winter Weather WEST VIRGINIA 88 0
Thunderstorm Wind WISCONSIN 416 1
Winter Storm WISCONSIN 310 0
Hail WISCONSIN 303 1

Native strategy

Följande fråga returnerar de 2 främsta EventType värdena efter TotalInjuries för varje State som börjar med "W":

StormEvents
| where State startswith 'W'
| partition hint.strategy = native by State
    (
    summarize TotalInjueries = sum(InjuriesDirect) by EventType
    | top 2 by TotalInjueries
    )

Output

EventType TotalInjueries
Tornado 4
Hail 1
Thunderstorm Wind 1
Excessive Heat 0
High Wind 13
Lightning 5
High Wind 5
Avalanche 3

Shuffle strategy

Följande fråga returnerar de 3 främsta DamagedProperty värdena foreach EpisodeId och kolumnerna EpisodeId och State.

StormEvents
| partition hint.strategy=shuffle by EpisodeId
    (
    top 3 by DamageProperty
    | project EpisodeId, State, DamageProperty
    )
| count

Output

Count
22345

Äldre strategi med explicit källa

Följande fråga kör två underfrågor:

  • När x == 1returnerar frågan alla rader från StormEvents som har InjuriesIndirect == 1.
  • När x == 2returnerar frågan alla rader från StormEvents som har InjuriesIndirect == 2.

Det slutliga resultatet är en union av dessa två underfrågor.

range x from 1 to 2 step 1
| partition hint.strategy=legacy by x {StormEvents | where x == InjuriesIndirect}
| count 

Output

Count
113

Partition reference

The following example shows how to use the as operator to give a "name" to each data partition and then reuse that name within the subquery. Den här metoden är endast relevant för legacy strategi.

T
| partition by Dim
(
    as Partition
    | extend MetricPct = Metric * 100.0 / toscalar(Partition | summarize sum(Metric))
)