operator partition
De partitieoperator partitioneert de records van de invoertabel in meerdere subtabellen op basis van waarden in een sleutelkolom. De operator voert een subquery uit op elke subtabel en produceert één uitvoertabel die de samenvoeging is van de resultaten van alle subquery's.
Deze operator is handig als u een subquery alleen wilt uitvoeren op een subset van rijen die tot dezelfde partitiesleutel behoren, en niet de hele gegevensset opvraagt. Deze subquery's kunnen statistische functies, vensterfuncties, top N en andere omvatten.
De partitieoperator ondersteunt verschillende strategieën voor subquerybewerkingen:
- Systeemeigen : gebruik met een impliciete gegevensbron met duizenden sleutelpartitiewaarden.
- Shuffle : gebruiken met een impliciete bron met miljoenen sleutelpartitiewaarden.
- Verouderd : gebruik met een impliciete of expliciete bron voor 64 of minder sleutelpartitiewaarden.
Syntax
T|
partition
[ hint.strategy=
Strategie ] [ Hints ] by
KolomtransformatieSubQuery(
)
T|
partition
[ hint.strategy=legacy
] [ Hints ] by
Column{
SubQueryWithSource}
Meer informatie over syntaxisconventies.
Parameters
Naam | Type | Vereist | Beschrijving |
---|---|---|---|
T | string |
✔️ | De invoerbron in tabelvorm. |
Strategie | string |
De waarde legacy , shuffle of native . Deze hint definieert de uitvoeringsstrategie van de partitieoperator.Als er geen strategie is opgegeven, wordt de legacy strategie gebruikt. Zie Strategieën voor meer informatie. |
|
Kolom | string |
✔️ | De naam van een kolom in T waarvan de waarden bepalen hoe de invoerbron in tabelvorm moet worden gepartitioneren. |
TransformationSubQuery | string |
✔️ | Een expressie voor tabellaire transformatie. De bron is impliciet de subtabellen die worden geproduceerd door het partitioneren van de records van T. Elke subtabel is homogeen op basis van de waarde van Kolom. De expressie moet slechts één tabellair resultaat opleveren en mag geen andere typen instructies bevatten, zoals let instructies. |
SubQueryWithSource | string |
✔️ | Een tabellaire expressie die een eigen tabellaire bron bevat, zoals een tabelreferentie. Deze syntaxis wordt alleen ondersteund met de verouderde strategie. De subquery kan alleen verwijzen naar de sleutelkolom , Kolom, uit T. Als u wilt verwijzen naar de kolom, gebruikt u de syntaxis toscalar( Kolom) .De expressie moet slechts één tabellair resultaat opleveren en mag geen andere typen instructies bevatten, zoals let instructies. |
Hints | string |
Nul of meer spaties gescheiden parameters in de vorm van: HintName= Value waarmee het gedrag van de operator wordt bepaald. Bekijk de ondersteunde hints per strategietype. |
Ondersteunde hints
Hintnaam | Type | Strategie | Description |
---|---|---|---|
hint.shufflekey |
string |
shuffle | De partitiesleutel die wordt gebruikt om de partitieoperator uit te voeren met de shuffle strategie. |
hint.materialized |
bool |
Legacy | Als dit is ingesteld op true , wordt de bron van de partition operator gerealiseerd. De standaardwaarde is false . |
hint.concurrency |
int |
Legacy | Bepaalt hoeveel partities parallel moeten worden uitgevoerd. De standaardwaarde is 16 . |
hint.spread |
int |
Legacy | Bepaalt hoe de partities moeten worden verdeeld over clusterknooppunten. De standaardwaarde is 1 .Als er bijvoorbeeld N-partities zijn en de spreidingshint is ingesteld op P, worden de N-partities door P verschillende clusterknooppunten parallel/sequentieel verwerkt, afhankelijk van de gelijktijdigheidshint. |
Retouren
De operator retourneert een samenvoeging van de resultaten van de afzonderlijke subquery's.
Strategieën
De partitieoperator ondersteunt verschillende strategieën voor subquerybewerkingen: systeemeigen, shuffle en verouderd.
Notitie
Door het onderscheid tussen de native
strategieën en shuffle
kan de aanroeper de kardinaliteit en uitvoeringsstrategie van de subquery aangeven. Deze keuze kan van invloed zijn op hoe lang het duurt om de subquery te voltooien, maar het eindresultaat wordt niet gewijzigd.
Systeemeigen strategie
Deze strategie moet worden toegepast wanneer het aantal afzonderlijke waarden van de partitiesleutel niet groot is, ongeveer in de duizenden.
De subquery moet een tabellaire transformatie zijn die geen tabellaire bron opgeeft. De bron is impliciet en wordt toegewezen op basis van de partities van de subtabel. Alleen bepaalde ondersteunde operators kunnen worden gebruikt in de subquery. Er is geen beperking voor het aantal partities.
Als u deze strategie wilt gebruiken, geeft u op hint.strategy=native
.
Strategie voor willekeurige volgorde
Deze strategie moet worden toegepast wanneer het aantal afzonderlijke waarden van de partitiesleutel groot is, in miljoenen.
De subquery moet een tabellaire transformatie zijn die geen tabellaire bron opgeeft. De bron is impliciet en wordt toegewezen op basis van de partities van de subtabel. Alleen bepaalde ondersteunde operators kunnen worden gebruikt in de subquery. Er is geen beperking voor het aantal partities.
Als u deze strategie wilt gebruiken, geeft u op hint.strategy=shuffle
. Zie Query's in willekeurige volgorde wijzigen voor meer informatie over de strategie en prestaties van willekeurige volgorde.
Ondersteunde operators voor de systeemeigen strategieën en shuffle-strategieën
De volgende lijst met operators kan worden gebruikt in subquery's met de systeemeigen strategieën of shuffle-strategieën:
- Tellen
- distinct
- Uitbreiden
- make-series
- mv-apply
- mv-expand
- parse
- parse-where
- Project
- project-away
- project-keep
- projectnaam wijzigen
- opnieuw ordenen van project
- Verminderen
- Monster
- sample-distinct
- Scan
- zoeken
- Serialize
- Sorteren
- Samenvatten
- Nemen
- Boven
- top-hitters
- bovenste geneste
- Waar
Notitie
- Operators die naar een andere tabelbron dan de subtabelpartities verwijzen, zijn niet compatibel met de
native
strategieën enshuffle
. Bijvoorbeeld join, union, externaldata en evaluate (plugins). Voor dergelijke scenario's gebruikt u de verouderde strategie. - De fork-operator wordt niet ondersteund voor een type strategie, omdat de subquery één tabellair resultaat moet retourneren.
Verouderde strategie
Om historische redenen is de legacy
strategie de standaardstrategie. We raden u echter aan de voorkeur te geven aan de systeemeigen of willekeurige strategieën, omdat de legacy
benadering beperkt is tot 64 partities en minder efficiënt is.
In sommige scenario's kan de legacy
strategie nodig zijn vanwege de ondersteuning voor het opnemen van een tabellaire bron in de subquery. In dergelijke gevallen kan de subquery alleen verwijzen naar de sleutelkolom , Kolom, uit de tabelbron voor invoer, T. Als u wilt verwijzen naar de kolom, gebruikt u de syntaxis toscalar(
Kolom)
.
Als de subquery een tabellaire transformatie zonder tabellaire bron is, is de bron impliciet en gebaseerd op de subtabelpartities.
Als u deze strategie wilt gebruiken, geeft u hint.strategy=legacy
een andere strategieindicatie op of laat u deze weg.
Notitie
Er treedt een fout op als de partitiekolom, Kolom, meer dan 64 afzonderlijke waarden bevat.
Voorbeelden
Topwaarden zoeken
In sommige gevallen is het beter om een query te schrijven met behulp van de partition
operator dan met behulp van de top-nested
operator. Met de volgende query wordt een subquery uitgevoerd die en voor elke State
query berekentsummarize
, top
die begint met W
: 'WYOMING', 'WASHINGTON', 'WEST VIRGINIA' en '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
)
Uitvoer
EventType | Staat | gebeurtenis | Verwondingen |
---|---|---|---|
Hagel | WYOMING | 108 | 0 |
Hoge wind | WYOMING | 81 | 5 |
Winterstorm | WYOMING | 72 | 0 |
Zware sneeuw | WASHINGTON | 82 | 0 |
Hoge wind | WASHINGTON | 58 | 13 |
Wildfire | WASHINGTON | 29 | 0 |
Onweerswind | WEST VIRGINIA | 180 | 1 |
Hagel | WEST VIRGINIA | 103 | 0 |
Winterweer | WEST VIRGINIA | 88 | 0 |
Onweerswind | WISCONSIN | 416 | 1 |
Winterstorm | WISCONSIN | 310 | 0 |
Hagel | WISCONSIN | 303 | 1 |
Systeemeigen strategie
De volgende query retourneert de bovenste 2 EventType
waarden TotalInjuries
op voor elk State
dat begint met 'W':
StormEvents
| where State startswith 'W'
| partition hint.strategy = native by State
(
summarize TotalInjueries = sum(InjuriesDirect) by EventType
| top 2 by TotalInjueries
)
Uitvoer
EventType | TotalInjueries |
---|---|
Tornado | 4 |
Hagel | 1 |
Onweerswind | 1 |
Overmatige hitte | 0 |
Hoge wind | 13 |
Lightning | 5 |
Hoge wind | 5 |
Lawine | 3 |
Shuffle-strategie
De volgende query retourneert de bovenste 3 DamagedProperty
waarden foreach EpisodeId
en de kolommen EpisodeId
en State
.
StormEvents
| partition hint.strategy=shuffle by EpisodeId
(
top 3 by DamageProperty
| project EpisodeId, State, DamageProperty
)
| count
Uitvoer
Count |
---|
22345 |
Verouderde strategie met expliciete bron
Met de volgende query worden twee subquery's uitgevoerd:
- Wanneer
x == 1
retourneert de query alle rijen vanStormEvents
die hebbenInjuriesIndirect == 1
. - Wanneer
x == 2
retourneert de query alle rijen vanStormEvents
die hebbenInjuriesIndirect == 2
.
Het uiteindelijke resultaat is de samenvoeging van deze twee subquery's.
range x from 1 to 2 step 1
| partition hint.strategy=legacy by x {StormEvents | where x == InjuriesIndirect}
| count
Uitvoer
Count |
---|
113 |
Partitiereferentie
In het volgende voorbeeld ziet u hoe u de operator as gebruikt om elke gegevenspartitie een 'naam' te geven en deze naam vervolgens opnieuw te gebruiken in de subquery. Deze aanpak is alleen relevant voor de legacy
strategie.
T
| partition by Dim
(
as Partition
| extend MetricPct = Metric * 100.0 / toscalar(Partition | summarize sum(Metric))
)
Feedback
https://aka.ms/ContentUserFeedback.
Binnenkort beschikbaar: In de loop van 2024 zullen we GitHub-problemen geleidelijk uitfaseren als het feedbackmechanisme voor inhoud en deze vervangen door een nieuw feedbacksysteem. Zie voor meer informatie:Feedback verzenden en weergeven voor