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.
Gäller för: ✅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. Dessa underfrågor kan innehålla aggregerade funktioner, fönsterfunktioner, N och andra.
Partitionsoperatorn stöder flera strategier för underfrågor:
- interna – används 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
KolumntransformeringSubQuery(
)
T|
partition
[ hint.strategy=legacy
] [ Tips ] by
Column{
SubQueryWithSource}
Läs mer om syntaxkonventioner.
Parametrar
Namn | Typ | Krävs | 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 används den legacy strategin. Mer information finns i Strategies. |
|
kolumn | string |
✔️ | Namnet på en kolumn i T vars värden avgör hur indatatabellkällan ska partitioneras. |
TransformationSubQuery | string |
✔️ | Ett tabelltransformeringsuttryck. Källan är implicit de undertabeller som skapas genom partitionering av posterna i T-. Varje undertabell är homogen på värdet för 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. Den här syntaxen stöds endast med den äldre strategin. Underfrågan kan bara referera till nyckelkolumnen, Column, från T. Om du vill referera till kolumnen använder du syntaxen toscalar( Column) .
Uttrycket får bara ge ett tabellresultat och ska inte ha andra typer av instruktioner, till exempel let -instruktioner. |
tips | string |
Noll eller fler blankstegsavgränsade parametrar i form av: HintName= Value som styr operatorns beteende. Se tips som stöds per strategityp. |
Tips som stöds
Tipsnamn | Typ | Strategi | Beskrivning |
---|---|---|---|
hint.shufflekey |
string |
blanda | Partitionsnyckeln som används för att köra partitionsoperatorn med strategin shuffle . |
hint.materialized |
bool |
äldre | Om värdet är inställt på true materialiserar källan för partition operatorn. Standardvärdet är false . |
hint.concurrency |
int |
äldre | Avgör hur många partitioner som ska köras parallellt. Standardvärdet är 16 . |
hint.spread |
int |
äldre | 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å Pbearbetas N partitioner av P olika klusternoder på samma sätt, parallellt/sekventiellt beroende på samtidighetstipset. |
Returnerar
Operatorn returnerar en union av resultaten från de enskilda underfrågorna.
Strategier
Partitionsoperatorn stöder flera strategier för underfrågor: interna, shuffleoch äldre.
Not
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.
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 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:
- antal
- distinkta
- utöka
- make-series (stöds delvis, se anmärkning)
- mv-apply
- mv-expandering
- parsa
- parsa där
- projekt
- minska
- exempel
- genomsök
- sök
- serialisera
- sortera
- sammanfatta
- ta
- övre
- toppspelare
- översta kapslade
- där
Not
- Operatorer som refererar till en annan tabellkälla än deltabellpartitionerna är inte kompatibla med strategierna
native
ochshuffle
. till exempel ansluta, union, externaldataoch utvärdera (plugin-program). I sådana scenarier använder du den äldre strategin. - Den förgrening operatorn stöds inte för någon strategityp, eftersom underfrågan måste returnera ett enda tabellresultat.
- Operatorn make-series stöds endast delvis inom operatorn
partition by
. Det stöds endast när både parametrarnafrom
ochto
anges.
Äldre strategi
Av historiska skäl är den legacy
strategin standardstrategin. Vi rekommenderar dock att du föredrar interna eller blanda strategier, eftersom den legacy
metoden är begränsad till 64 partitioner och är mindre effektiv.
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. 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 syntaxen 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.
Not
Ett fel uppstår om partitionskolumnen, Kolumn, innehåller fler än 64 distinkta värden.
Exempel
Exemplen i det här avsnittet visar hur du använder syntaxen för att komma igång.
Exemplen i den här artikeln använder offentligt tillgängliga tabeller i hjälpkluster, till exempel tabellen
StormEvents
i databasen Samples.
Exemplen i den här artikeln använder offentligt tillgängliga tabeller, till exempel tabellen
StormEvents
i Väderanalys exempeldata.
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
)
utdata
Evenemangstyp | Stat | Evenemang | 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 | tretton |
Löpeld | WASHINGTON | 29 | 0 |
Åskväder | WEST VIRGINIA | 180 | 1 |
Hagel | WEST VIRGINIA | 103 | 0 |
Vinterväder | WEST VIRGINIA | 88 | 0 |
Åskväder | WISCONSIN | 416 | 1 |
Vinterstorm | WISCONSIN | 310 | 0 |
Hagel | WISCONSIN | 303 | 1 |
Intern strategi
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
)
utdata
Evenemangstyp | TotalInjueries |
---|---|
Tromb | 4 |
Hagel | 1 |
Åskväder | 1 |
Överdriven värme | 0 |
Hög vind | tretton |
Blixt | 5 |
Hög vind | 5 |
Lavin | 3 |
Shuffle-strategi
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
utdata
Räkna |
---|
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
.
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
utdata
Räkna |
---|
113 |
Partitionsreferens
I följande exempel visas hur du använder som operator 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
strategi.
T
| partition by Dim
(
as Partition
| extend MetricPct = Metric * 100.0 / toscalar(Partition | summarize sum(Metric))
)