Dela via


partitionsoperator

Gäller för: ✅Microsoft FabricAzure Data ExplorerAzure MonitorMicrosoft 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 ] byKolumntransformeringSubQuery()

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

Läs mer om syntaxkonventioner.

Parametrar

Namn Typ Krävs Beskrivning
T string ✔️ Tabellkällan för indata.
strategi string Värdet legacy, shuffleeller 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å truematerialiserar 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:

Not

  • Operatorer som refererar till en annan tabellkälla än deltabellpartitionerna är inte kompatibla med strategierna native och shuffle. 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 parametrarna from och to 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 == 1returnerar frågan alla rader från StormEvents som har InjuriesIndirect == 1.
  • När x == 2returnerar frågan alla rader från StormEvents som har InjuriesIndirect == 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))
)