Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Applies to: ✅Microsoft Fabric✅Azure Data Explorer✅Azure Monitor✅Microsoft 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:
- count
- distinct
- extend
- make-series (partially supported, see note)
- mv-apply
- mv-expand
- parse
- parse-where
- project
- project-away
- project-keep
- project-rename
- project-reorder
- reduce
- sample
- sample-distinct
- scan
- search
- serialize
- sort
- summarize
- take
- top
- top-hitters
- top-nested
- where
Note
- Operatorer som refererar till en annan tabellkälla än deltabellpartitionerna är inte kompatibla med strategierna
nativeochshuffle. 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 byoperator. Det stöds endast när både parametrarnafromochtoanges.
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
StormEventstable in the Samples database.
The examples in this article use publicly available tables, such as the
Weathertable 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ånStormEventssom harInjuriesIndirect == 1. - När
x == 2returnerar frågan alla rader frånStormEventssom harInjuriesIndirect == 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))
)