partition-operatorn
Partitionsoperatorn partitioner 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.
Den här operatorn är användbar när du bara behöver utföra en underfråga på en delmängd av rader som tillhör samma partitionsnyckel och inte fråga hela datauppsättningen. Dessa underfrågor kan innehålla aggregeringsfunktioner, fönsterfunktioner, översta N och andra.
Partitionsoperatorn stöder flera strategier för underfrågor:
- Intern – använd med en implicit datakälla med tusentals nyckelpartitionsvärden.
- Shuffle – använd med en implicit källa med miljontals nyckelpartitionsvärden.
- Äldre – använd med en implicit eller explicit källa för 64 eller färre nyckelpartitionsvärden.
Syntax
T|
partition
[ hint.strategy=
Strategi ] [ Tips ] by
KolumntransformeringarSubQuery(
)
T|
partition
[ hint.strategy=legacy
] [ tips ] by
kolumn{
subquerywithsource}
Läs mer om syntaxkonventioner.
Parametrar
Namn | Typ | Obligatorisk | Beskrivning |
---|---|---|---|
T | string |
✔️ | Tabellkällan för indata. |
Strategi | string |
Värdet legacy , shuffle eller native . Det här tipset definierar partitionsoperatorns körningsstrategi.Om ingen strategi anges legacy används strategin. Mer information finns i Strategier. |
|
Kolumn | string |
✔️ | Namnet på en kolumn i T vars värden bestämmer hur indatatabellkällan ska partitioneras. |
TransformationSubQuery | string |
✔️ | Ett transformeringsuttryck i tabellform. Källan är implicit de undertabeller som skapas genom partitionering av posterna i T. Varje undertabell är homogen på värdet för Kolumn. Uttrycket får bara ge ett tabellresultat och får 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. Den här syntaxen stöds bara med den äldre strategin. Underfrågan kan bara referera till nyckelkolumnen, Kolumn, från T. Om du vill referera till kolumnen använder du syntaxkolumnen) toscalar( .Uttrycket får bara ge ett tabellresultat och får inte ha andra typer av -instruktioner, till exempel let -instruktioner. |
Tips | string |
Noll eller fler blankstegsavgränsade parametrar i form av: HintName-värde= som styr operatorns beteende. Se tips som stöds per strategityp. |
Tips som stöds
Tipsnamn | Typ | Strategi | Description |
---|---|---|---|
hint.shufflekey |
string |
shuffle | Partitionsnyckeln som används för att köra partitionsoperatorn med shuffle strategin. |
hint.materialized |
bool |
Legacy | Om värdet är true , kommer att materialisera operatorns partition källa. 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 .Om det till exempel finns N partitioner och spridningstipset är inställt på P, bearbetas N-partitionerna av P olika klusternoder lika parallellt/sekventiellt beroende på samtidighetstipset. |
Returer
Operatorn returnerar en union av resultaten från de enskilda underfrågorna.
Strategier
Partitionsoperatorn stöder flera strategier för underfrågor: intern, shuffle och äldre.
Anteckning
Skillnaden mellan strategierna native
och shuffle
gör att anroparen kan ange underfrågans kardinalitet och körningsstrategi. Det här valet kan påverka hur lång tid underfrågan tar att slutföra men ändrar inte slutresultatet.
Intern strategi
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. Endast vissa operatorer som stöds kan användas i underfrågan. Det finns ingen begränsning för antalet partitioner.
Om du vill använda den här strategin anger du hint.strategy=native
.
Shuffle-strategi
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. Endast vissa operatorer som stöds kan användas i underfrågan. Det finns ingen begränsning för antalet partitioner.
Om du vill använda den här strategin anger du hint.strategy=shuffle
. Mer information om shuffle-strategi och prestanda finns i shuffle-fråga.
Operatorer som stöds för de interna strategierna och shuffle-strategierna
Följande lista över operatorer kan användas i underfrågor med interna strategier eller shuffle-strategier:
- Räkna
- Distinkta
- Utöka
- make-series
- mv-apply
- mv-expand
- parse
- parsa-where
- Projekt
- project-away
- project-keep
- project-rename
- project-reorder
- Minska
- Prov
- sample-distinct
- Scan
- search
- Serialisera
- Sortera
- Sammanfatta
- Ta
- Topp
- top-hitters
- överst kapslad
- Där
Anteckning
- Operatorer som refererar till en annan tabellkälla än undertabellpartitionerna är inte kompatibla med strategierna
native
ochshuffle
. Till exempel join, union, externaldata och evaluate (plugins). För sådana scenarier använder du den äldre strategin. - Förgreningsoperatorn stöds inte för någon strategityp, eftersom underfrågan måste returnera ett enda tabellresultat.
Äldre strategi
Av historiska skäl legacy
är strategin standardstrategin. Vi rekommenderar dock att du föredrar de interna strategierna eller shuffle-strategiernalegacy
, eftersom metoden är begränsad till 64 partitioner och är mindre effektiv.
I vissa scenarier legacy
kan strategin vara nödvändig på grund av dess stöd för att inkludera en tabellkälla i underfrågan. I sådana fall kan underfrågan bara referera till nyckelkolumnen, Kolumn, från indatatabellkällan, T. Om du vill referera till kolumnen använder du syntaxkolumnen)
toscalar(
.
Om underfrågan är en tabelltransformering utan tabellkälla är källan implicit och baseras på undertabellpartitionerna.
Om du vill använda den här strategin anger hint.strategy=legacy
eller utelämnar du någon annan strategiindikator.
Anteckning
Ett fel uppstår om partitionskolumnen Kolumn innehåller fler än 64 distinkta värden.
Exempel
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
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
)
Resultat
Eventtype | Tillstånd | Händelser | Skador |
---|---|---|---|
Hagel | WYOMING | 108 | 0 |
Hög vind | WYOMING | 81 | 5 |
Vinterstorm | WYOMING | 72 | 0 |
Tung snö | WASHINGTON | 82 | 0 |
Hög vind | WASHINGTON | 58 | 13 |
Wildfire | WASHINGTON | 29 | 0 |
Åska vind | West Virginia | 180 | 1 |
Hagel | West Virginia | 103 | 0 |
Vinterväder | West Virginia | 88 | 0 |
Åska vind | WISCONSIN | 416 | 1 |
Vinterstorm | WISCONSIN | 310 | 0 |
Hagel | WISCONSIN | 303 | 1 |
Intern strategi
Följande fråga returnerar de 2 EventType
främsta värdena TotalInjuries
efter 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
)
Resultat
Eventtype | TotalInjueries |
---|---|
Tornado | 4 |
Hagel | 1 |
Åska vind | 1 |
Överdriven värme | 0 |
Hög vind | 13 |
Lightning | 5 |
Hög vind | 5 |
Lavin | 3 |
Shuffle-strategi
Följande fråga returnerar de 3 DamagedProperty
främsta 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
Resultat
Antal |
---|
22345 |
Äldre strategi med explicit källa
Följande fråga kör två underfrågor:
- När
x == 1
returnerar frågan alla rader frånStormEvents
som harInjuriesIndirect == 1
. - När
x == 2
returnerar frågan alla rader frånStormEvents
som harInjuriesIndirect == 2
.
Slutresultatet ä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
Resultat
Antal |
---|
113 |
Partitionsreferens
I följande exempel visas hur du använder operatorn som för att ge ett "namn" till varje datapartition och sedan återanvända det namnet i underfrågan. Den här metoden är endast relevant för legacy
strategin.
T
| partition by Dim
(
as Partition
| extend MetricPct = Metric * 100.0 / toscalar(Partition | summarize sum(Metric))
)
Feedback
https://aka.ms/ContentUserFeedback.
Kommer snart: Under hela 2024 kommer vi att fasa ut GitHub-problem som feedbackmekanism för innehåll och ersätta det med ett nytt feedbacksystem. Mer information finns i:Skicka och visa feedback för