partitieoperator
Van toepassing op: ✅Microsoft Fabric✅Azure Data Explorer✅Azure Monitor✅Microsoft Sentinel-
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.
De partitieoperator is handig wanneer u alleen een subquery moet uitvoeren op een subset van rijen die deel uitmaken van dezelfde partitiesleutel, en niet een query van de hele gegevensset. Deze subquery's kunnen statistische functies, vensterfuncties, top N en andere omvatten.
De partitieoperator ondersteunt verschillende strategieën voor subquerybewerking:
- Systeemeigen: gebruik met een impliciete gegevensbron met duizenden sleutelpartitiewaarden.
- Shuffle-: gebruik deze met een impliciete bron met miljoenen sleutelpartitiewaarden.
- verouderde: gebruik met een impliciete of expliciete bron voor 64 of minder sleutelpartitiewaarden.
Syntaxis
T|
partition
[ hint.strategy=
Strategie ] [ Hints ] by
Column(
TransformationSubQuery-)
T|
partition
[ hint.strategy=legacy
] [ Hints ] by
Column{
SubQueryWithSource}
Meer informatie over syntaxisconventies.
Parameters
Naam | Type | Vereist | Beschrijving |
---|---|---|---|
T- | string |
✔️ | De bron in tabelvorm van invoer. |
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ënvoor 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 de records van T-te partitioneren. Elke subtabel is homogeen voor de waarde van Kolom.
De expressie moet slechts één tabellair resultaat bevatten en mag geen andere typen instructies hebben, zoals let instructies. |
SubQueryWithSource- | string |
✔️ | Een tabellaire expressie die een eigen tabellaire bron bevat, zoals een tabelverwijzing. Deze syntaxis wordt alleen ondersteund met de verouderde strategie. De subquery kan alleen verwijzen naar de sleutelkolom, Kolom, van T-. Als u naar de kolom wilt verwijzen, gebruikt u de syntaxis toscalar( Kolom) .
De expressie moet slechts één tabellair resultaat bevatten en mag geen andere typen instructies hebben, zoals let instructies. |
hints | string |
Nul of meer door spaties gescheiden parameters in de vorm van: HintName= Waarde waarmee het gedrag van de operator wordt bepaald. Zie de ondersteunde hints per strategietype. |
Ondersteunde hints
Hintnaam | Type | Strategie | Beschrijving |
---|---|---|---|
hint.shufflekey |
string |
willekeurige | De partitiesleutel die wordt gebruikt om de partitieoperator uit te voeren met de shuffle strategie. |
hint.materialized |
bool |
verouderde | Als deze optie is ingesteld op true , wordt de bron van de operator partition gerealiseerd. De standaardwaarde is false . |
hint.concurrency |
int |
verouderde | Bepaalt hoeveel partities parallel moeten worden uitgevoerd. De standaardwaarde is 16 . |
hint.spread |
int |
verouderde | Bepaalt hoe u de partities over clusterknooppunten distribueert. De standaardwaarde is 1 .
Als er bijvoorbeeld N- partities zijn en de hint voor verspreiding is ingesteld op P-, worden de N- partities verwerkt door P verschillende clusterknooppunten, parallel/opeenvolgend, afhankelijk van de gelijktijdigheidstip. |
Retourneert
De operator retourneert een samenvoeging van de resultaten van de afzonderlijke subquery's.
Strategieën
De partitieoperator ondersteunt verschillende strategieën voor subquerybewerkingen: systeemeigen, willekeurigeen verouderde.
Notitie
Door het onderscheid tussen de strategieën native
en shuffle
kan de beller de kardinaliteit en uitvoeringsstrategie van de subquery aangeven. Deze keuze kan van invloed zijn op hoe lang de subquery duurt, maar het eindresultaat niet wijzigt.
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 volgens de subtabelpartities. 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 hint.strategy=native
op.
Strategie voor willekeurige volgorde
Deze strategie moet worden toegepast wanneer het aantal afzonderlijke waarden van de partitiesleutel groot is, in de miljoenen.
De subquery moet een tabellaire transformatie zijn die geen tabellaire bron opgeeft. De bron is impliciet en wordt toegewezen volgens de subtabelpartities. 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 hint.strategy=shuffle
op. Zie shuffle-queryvoor meer informatie over de strategie en prestaties van willekeurige volgorde.
Ondersteunde operators voor de systeemeigen en willekeurige strategieën
De volgende lijst met operators kan worden gebruikt in subquery's met de systeemeigen of willekeurige strategieën:
- aantal
- afzonderlijke
- uitbreiden
- mv-apply-
- mv-expand
- parseren
- parseren waar
- project
- project weg
- project-keep
- projectnaam wijzigen
- project opnieuw ordenen
- verminderen
- voorbeeld
- unieke voorbeeld-
- scan
- zoeken
- serialiseren
- sorteren
- samenvatten
- bovenste
- top-hitters
- meest geneste
- waar
Notitie
- Operators die verwijzen naar een andere tabelbron dan de subtabelpartities zijn niet compatibel met de
native
enshuffle
strategieën. Bijvoorbeeld lid worden van, union, externaldataen (plugins) evalueren. Voor dergelijke scenario's kunt u de verouderde strategie. - De fork--operator wordt niet ondersteund voor een strategietype, omdat de subquery één tabellair resultaat moet retourneren.
Verouderde strategie
Om historische redenen is de legacy
strategie de standaardstrategie. We raden echter aan om de systeemeigen of willekeurige strategieën te gebruiken, 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 tabellaire invoerbron T. Als u naar de kolom wilt verwijzen, gebruikt u de syntaxis toscalar(
Kolom)
.
Als de subquery een tabellaire transformatie is zonder een tabellaire bron, is de bron impliciet en is deze gebaseerd op de subtabelpartities.
Als u deze strategie wilt gebruiken, geeft u hint.strategy=legacy
op of laat u een andere strategieindicatie weg.
Notitie
Er treedt een fout op als de partitiekolom, Kolom, meer dan 64 afzonderlijke waarden bevat.
Voorbeelden
In de voorbeelden in deze sectie ziet u hoe u de syntaxis kunt gebruiken om aan de slag te gaan.
In de voorbeelden in dit artikel worden openbaar beschikbare tabellen gebruikt in de Help-cluster, zoals de
StormEvents
tabel in de Voorbeelden database.
In de voorbeelden in dit artikel worden openbaar beschikbare tabellen gebruikt, zoals de tabel
StormEvents
in de weather analytics voorbeeldgegevens.
Topwaarden zoeken
In sommige gevallen is het efficiënter en eenvoudiger om een query te schrijven met behulp van de operator partition
dan met behulp van de operator top-nested
. Met de volgende query wordt een subquery uitgevoerd voor het berekenen van summarize
en top
voor elke State
, te beginnen met W
: WYOMING, WASHINGTON, WEST VIRGINIA en ).).
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 | Gebeurtenissen | Verwondingen |
---|---|---|---|
Hagel | WYOMING | 108 | 0 |
Hoge wind | WYOMING | 81 | 5 |
Winterstorm | WYOMING | 72 | 0 |
Zware sneeuw | WASHINGTON | 82 | 0 |
Hoge wind | WASHINGTON | 58 | 13 |
Wildvuur | WASHINGTON | 29 | 0 |
Onweer wind | WEST VIRGINIA | 180 | 1 |
Hagel | WEST VIRGINIA | 103 | 0 |
Winterweer | WEST VIRGINIA | 88 | 0 |
Onweer wind | WISCONSIN | 416 | 1 |
Winterstorm | WISCONSIN | 310 | 0 |
Hagel | WISCONSIN | 303 | 1 |
Systeemeigen strategie
De volgende query retourneert de bovenste 2 EventType
waarden per TotalInjuries
voor elke State
die 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 |
Onweer wind | 1 |
Overmatige hitte | 0 |
Hoge wind | 13 |
Bliksem | 5 |
Hoge wind | 5 |
Lawine | 3 |
Strategie voor willekeurige volgorde
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
Tellen |
---|
22345 |
Verouderde strategie met expliciete bron
Met de volgende query worden twee subquery's uitgevoerd:
- Wanneer
x == 1
, retourneert de query alle rijen uitStormEvents
metInjuriesIndirect == 1
. - Wanneer
x == 2
, retourneert de query alle rijen uitStormEvents
metInjuriesIndirect == 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
Tellen |
---|
113 |
Partitiereferentie
In het volgende voorbeeld ziet u hoe u de als operator gebruikt om een 'naam' aan elke gegevenspartitie te geven en die naam vervolgens opnieuw te gebruiken in de subquery. Deze benadering is alleen relevant voor de legacy
strategie.
T
| partition by Dim
(
as Partition
| extend MetricPct = Metric * 100.0 / toscalar(Partition | summarize sum(Metric))
)