Delen via


partitieoperator

Van toepassing op: ✅Microsoft FabricAzure Data ExplorerAzure MonitorMicrosoft 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 ] byColumn(TransformationSubQuery-)

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

Meer informatie over syntaxisconventies.

Parameters

Naam Type Vereist Beschrijving
T- string ✔️ De bron in tabelvorm van invoer.
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ë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=nativeop.

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=shuffleop. 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:

Notitie

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

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))
)