Operatore partition
Si applica a: ✅Microsoft Fabric✅Azure Esplora dati✅ Azure Monitor✅Microsoft Sentinel
L'operatore partition partiziona i record della tabella di input in più tabelle secondarie in base ai valori di una colonna chiave. L'operatore esegue una sottoquery in ogni sottotabella e produce una singola tabella di output che rappresenta l'unione dei risultati di tutte le sottoquery.
Questo operatore è utile quando è necessario eseguire una sottoquery solo su un subset di righe appartenenti alla stessa chiave di partizione e non eseguire query sull'intero set di dati. Queste sottoquery possono includere funzioni di aggregazione, funzioni finestra, primi N e altri.
L'operatore partition supporta diverse strategie di operazione di sottoquery:
- Nativo : usare con un'origine dati implicita con migliaia di valori di partizione chiave.
- Shuffle : usare con un'origine implicita con milioni di valori di partizione chiave.
- Legacy: usare con un'origine implicita o esplicita per 64 o meno valori di partizione chiave.
Sintassi
T partition
|
[ hint.strategy=
Strategia ] [ Hint ] by
Trasformazione colonnaSubQuery (
)
T partition
|
[ ] [ hint.strategy=legacy
Hints ] by
Column {
SubQueryWithSource }
Altre informazioni sulle convenzioni di sintassi.
Parametri
Nome | Digita | Obbligatorio | Descrizione |
---|---|---|---|
T | string |
✔️ | Origine tabulare di input. |
Strategia | string |
Valore legacy , shuffle o native . Questo hint definisce la strategia di esecuzione dell'operatore di partizione.Se non viene specificata alcuna strategia, viene usata la legacy strategia. Per altre informazioni, vedere Strategie. |
|
Istogramma | string |
✔️ | Nome di una colonna in T i cui valori determinano come partizionare l'origine tabulare di input. |
TransformationSubQuery | string |
✔️ | Espressione di trasformazione tabulare. L'origine è implicitamente le sottotable prodotte partizionando i record di T. Ogni sottotabella è omogenea sul valore di Column. L'espressione deve fornire un solo risultato tabulare e non deve avere altri tipi di istruzioni, ad esempio let le istruzioni. |
SubQueryWithSource | string |
✔️ | Espressione tabulare che include la propria origine tabulare, ad esempio un riferimento a una tabella. Questa sintassi è supportata solo con la strategia legacy. La sottoquery può fare riferimento solo alla colonna chiave, Column, da T. Per fare riferimento alla colonna, utilizzare la sintassi toscalar( Column) .L'espressione deve fornire un solo risultato tabulare e non deve avere altri tipi di istruzioni, ad esempio let le istruzioni. |
Hint | string |
Zero o più parametri separati da spazi sotto forma di: HintName = Value che controlla il comportamento dell'operatore. Vedere gli hint supportati per ogni tipo di strategia. |
Hint supportati
Nome hint | Type | Strategia | Descrizione |
---|---|---|---|
hint.shufflekey |
string |
shuffle | Chiave di partizione usata per eseguire l'operatore di partizione con la shuffle strategia . |
hint.materialized |
bool |
Eredità | Se impostato su true , materializzerà l'origine dell'operatore partition . Il valore predefinito è false . |
hint.concurrency |
int |
Eredità | Determina il numero di partizioni da eseguire in parallelo. Il valore predefinito è 16 . |
hint.spread |
int |
Eredità | Determina come distribuire le partizioni tra i nodi del cluster. Il valore predefinito è 1 .Ad esempio, se sono presenti N partizioni e l'hint spread è impostato su P, le N partizioni verranno elaborate da nodi cluster diversi P in parallelo/sequenziale a seconda dell'hint di concorrenza. |
Valori restituiti
L'operatore restituisce un'unione dei risultati delle singole sottoquery.
Strategie
L'operatore partition supporta diverse strategie di operazione di sottoquery: nativa, casuale e legacy.
Nota
La distinzione tra le native
strategie e shuffle
consente al chiamante di indicare la cardinalità e la strategia di esecuzione della sottoquery. Questa scelta può influire sul tempo necessario per completare la sottoquery, ma non modifica il risultato finale.
Strategia nativa
Questa strategia deve essere applicata quando il numero di valori distinti della chiave di partizione non è grande, approssimativamente nelle migliaia.
La sottoquery deve essere una trasformazione tabulare che non specifica un'origine tabulare. L'origine è implicita e viene assegnata in base alle partizioni sottotable. Nella sottoquery è possibile usare solo determinati operatori supportati. Non esiste alcuna restrizione sul numero di partizioni.
Per usare questa strategia, specificare hint.strategy=native
.
Strategia casuale
Questa strategia deve essere applicata quando il numero di valori distinti della chiave di partizione è elevato, in milioni.
La sottoquery deve essere una trasformazione tabulare che non specifica un'origine tabulare. L'origine è implicita e viene assegnata in base alle partizioni sottotable. Nella sottoquery è possibile usare solo determinati operatori supportati. Non esiste alcuna restrizione sul numero di partizioni.
Per usare questa strategia, specificare hint.strategy=shuffle
. Per altre informazioni sulla strategia e sulle prestazioni casuali, vedere Query casuali.
Operatori supportati per le strategie native e shuffle
L'elenco di operatori seguente può essere usato nelle sottoquery con le strategie native o shuffle:
- count
- distinct
- extend
- serie make-series
- mv-apply
- mv-expand
- parse
- parse-where
- project
- project-away
- project-keep
- project-rename
- project-reorder
- ridurre
- sample
- sample-distinct
- scan
- search
- Serializzare
- ordinamento
- summarize
- take
- top
- top-hitters
- top-nested
- where
Nota
- Gli operatori che fanno riferimento a un'origine di tabella diversa dalle partizioni sottotabella non sono compatibili con le
native
strategie eshuffle
. Ad esempio, join, unione, externaldata e valutazione (plug-in). Per questi scenari, ricorrere alla strategia legacy. - L'operatore fork non è supportato per alcun tipo di strategia, perché la sottoquery deve restituire un singolo risultato tabulare.
Strategia legacy
Per motivi cronologici, la legacy
strategia è la strategia predefinita. È tuttavia consigliabile favorire le strategie native o casuali , poiché l'approccio legacy
è limitato a 64 partizioni ed è meno efficiente.
In alcuni scenari, la legacy
strategia potrebbe essere necessaria a causa del supporto per l'inclusione di un'origine tabulare nella sottoquery. In questi casi, la sottoquery può fare riferimento solo alla colonna chiave, Column, dall'origine tabulare di input T. Per fare riferimento alla colonna, utilizzare la sintassi toscalar(
Column)
.
Se la sottoquery è una trasformazione tabulare senza un'origine tabulare, l'origine è implicita ed è basata sulle partizioni sottotable.
Per usare questa strategia, specificare o omettere hint.strategy=legacy
qualsiasi altra indicazione di strategia.
Nota
Si verificherà un errore se la colonna della partizione, Column, contiene più di 64 valori distinti.
Esempi
Trovare i valori principali
In alcuni casi, è più efficiente e più facile scrivere una query usando l'operatore rispetto all'operatore partition
top-nested
. La query seguente esegue una sottoquery calcolando summarize
e top
per ognuno State
a partire da W
: "WYOMING", "WASHINGTON", "WEST VIRGINIA" e "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
)
Output
EventType | Provincia | Eventi | Infortuni |
---|---|---|---|
Grandine | WYOMING | 108 | 0 |
Vento forte | WYOMING | 81 | 5 |
Tempesta invernale | WYOMING | 72 | 0 |
Raffiche di neve | WASHINGTON | 82 | 0 |
Vento forte | WASHINGTON | 58 | 13 |
Wildfire | WASHINGTON | 29 | 0 |
Vento di tempesta | VIRGINIA OCCIDENTALE | 180 | 1 |
Grandine | VIRGINIA OCCIDENTALE | 103 | 0 |
Clima invernale | VIRGINIA OCCIDENTALE | 88 | 0 |
Vento di tempesta | WISCONSIN | 416 | 1 |
Tempesta invernale | WISCONSIN | 310 | 0 |
Grandine | WISCONSIN | 303 | 1 |
Strategia nativa
La query seguente restituisce i primi 2 EventType
valori per TotalInjuries
ognuno State
che inizia con 'W':
StormEvents
| where State startswith 'W'
| partition hint.strategy = native by State
(
summarize TotalInjueries = sum(InjuriesDirect) by EventType
| top 2 by TotalInjueries
)
Output
EventType | TotalInjueries |
---|---|
Tornado | 4 |
Grandine | 1 |
Vento di tempesta | 1 |
Calore eccessivo | 0 |
Vento forte | 13 |
Lightning | 5 |
Vento forte | 5 |
Valanga | 3 |
Strategia casuale
La query seguente restituisce i primi 3 DamagedProperty
valori foreach EpisodeId
e le colonne EpisodeId
e State
.
StormEvents
| partition hint.strategy=shuffle by EpisodeId
(
top 3 by DamageProperty
| project EpisodeId, State, DamageProperty
)
| count
Output
Count |
---|
22345 |
Strategia legacy con origine esplicita
La query seguente esegue due sottoquery:
- Quando
x == 1
, la query restituisce tutte le righe daStormEvents
conInjuriesIndirect == 1
. - Quando
x == 2
, la query restituisce tutte le righe daStormEvents
conInjuriesIndirect == 2
.
Il risultato finale è l'unione di queste due sottoquery.
range x from 1 to 2 step 1
| partition hint.strategy=legacy by x {StormEvents | where x == InjuriesIndirect}
| count
Output
Count |
---|
113 |
Riferimento alla partizione
Nell'esempio seguente viene illustrato come usare l'operatore as per assegnare un "nome" a ogni partizione di dati e quindi riutilizzare tale nome all'interno della sottoquery. Questo approccio è rilevante solo per la legacy
strategia.
T
| partition by Dim
(
as Partition
| extend MetricPct = Metric * 100.0 / toscalar(Partition | summarize sum(Metric))
)