Delen via


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 ] byKolomtransformatieSubQuery()

T|partition [ hint.strategy=legacy ] [ Hints ] byColumn{SubQueryWithSource}

Meer informatie over syntaxisconventies.

Parameters

Naam Type Vereist Beschrijving
T string ✔️ De invoerbron in tabelvorm.
Strategie string De waarde legacy, shuffleof 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:

Notitie

  • Operators die naar een andere tabelbron dan de subtabelpartities verwijzen, zijn niet compatibel met de native strategieën en shuffle . 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 == 1retourneert de query alle rijen van StormEvents die hebben InjuriesIndirect == 1.
  • Wanneer x == 2retourneert de query alle rijen van StormEvents die hebben InjuriesIndirect == 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))
)