Operátor partition
Platí pro: ✅Microsoft Fabric✅Azure Data Explorer✅Azure Monitor✅Microsoft Sentinel
Operátor oddílu rozdělí záznamy své vstupní tabulky do více podtables podle hodnot ve sloupci klíče. Operátor spustí poddotaz na každé podtable a vytvoří jednu výstupní tabulku, která je sjednocením výsledků všech poddotazů.
Tento operátor je užitečný, když potřebujete provést poddotaz pouze na podmnožinu řádků, které patří do stejného klíče oddílu, a ne dotazovat se na celou datovou sadu. Mezi tyto poddotazy můžou patřit agregační funkce, funkce oken, horní N a další.
Operátor oddílu podporuje několik strategií operace poddotazů:
- Nativní – používá se s implicitními zdroji dat s tisíci hodnot oddílů klíčů.
- Náhodné prohazování – používá se s implicitní zdrojem s miliony hodnot oddílů klíčů.
- Starší verze – používá se s implicitním nebo explicitním zdrojem pro 64 nebo méně hodnot oddílů klíče.
Syntaxe
T partition
|
[ hint.strategy=
Strategie ] [ Rady ] by
Transformace sloupcůSubQuery (
)
T partition
|
[ ] [ hint.strategy=legacy
Hints ] by
Column {
SubQueryWithSource }
Přečtěte si další informace o konvencích syntaxe.
Parametry
Název | Type | Požadováno | Popis |
---|---|---|---|
T | string |
✔️ | Vstupní tabulkový zdroj. |
Strategie | string |
Hodnota legacy , shuffle nebo native . Tento tip definuje strategii provádění operátoru oddílu.Pokud není zadána žádná strategie, použije se legacy strategie. Další informace naleznete v tématu Strategie. |
|
Sloupec | string |
✔️ | Název sloupce v T , jehož hodnoty určují způsob rozdělení vstupního tabulkového zdroje. |
TransformationSubQuery | string |
✔️ | Tabulkový transformační výraz. Zdroj je implicitně podřízené tabulky vytvořené rozdělením záznamů T. Každá podtable je homogenní pro hodnotu Column. Výraz musí obsahovat pouze jeden tabulkový výsledek a neměl by obsahovat jiné typy příkazů, jako let jsou příkazy. |
SubQueryWithSource | string |
✔️ | Tabulkový výraz, který obsahuje vlastní tabulkový zdroj, například odkaz na tabulku. Tato syntaxe je podporována pouze ve starší strategii. Poddotaz může odkazovat pouze na klíčový sloupec Sloupec z T. Pokud chcete odkazovat na sloupec, použijte syntaxi toscalar( Sloupec) .Výraz musí obsahovat pouze jeden tabulkový výsledek a neměl by obsahovat jiné typy příkazů, jako let jsou příkazy. |
Rady | string |
Nula nebo více parametrů oddělených mezerami ve formě: HintName = Hodnota, která řídí chování operátoru. Podívejte se na podporované rady pro jednotlivé typy strategie. |
Podporované rady
Název nápovědy | Typ | Strategie | Popis |
---|---|---|---|
hint.shufflekey |
string |
zamíchat | Klíč oddílu použitý ke spuštění operátoru oddílu shuffle se strategií. |
hint.materialized |
bool |
dědictví | Pokud je nastavena hodnota true , materializuje zdroj operátoru partition . Výchozí hodnota je false . |
hint.concurrency |
int |
dědictví | Určuje, kolik oddílů se má paralelně spouštět. Výchozí hodnota je 16 . |
hint.spread |
int |
dědictví | Určuje, jak distribuovat oddíly mezi uzly clusteru. Výchozí hodnota je 1 .Pokud jsou například oddíly N a tip šíření je nastavený na P, pak N oddíly budou zpracovány různými uzly clusteru P rovnoměrně paralelně nebo postupně v závislosti na nápovědě souběžnosti. |
Návraty
Operátor vrátí sjednocení výsledků jednotlivých poddotazů.
Strategie
Operátor oddílu podporuje několik strategií operace poddotazů: nativní, náhodné prohazování a starší verze.
Poznámka:
Rozdíl mezi strategiemi native
shuffle
umožňuje volajícímu označit kardinalitu a strategii provádění poddotazu. Tato volba může ovlivnit, jak dlouho trvá dokončení poddotazu, ale nezmění konečný výsledek.
Nativní strategie
Tato strategie by se měla použít, když počet jedinečných hodnot klíče oddílu není velký, zhruba v tisících.
Poddotaz musí být tabulková transformace, která neurčí tabulkový zdroj. Zdroj je implicitní a je přiřazen podle oddílů podtable. V poddotazu lze použít pouze některé podporované operátory . Počet oddílů není nijak omezen.
Chcete-li použít tuto strategii, zadejte hint.strategy=native
.
Strategie náhodného prohazu
Tato strategie by se měla použít, pokud je počet jedinečných hodnot klíče oddílu velký v milionech.
Poddotaz musí být tabulková transformace, která neurčí tabulkový zdroj. Zdroj je implicitní a je přiřazen podle oddílů podtable. V poddotazu lze použít pouze některé podporované operátory . Počet oddílů není nijak omezen.
Chcete-li použít tuto strategii, zadejte hint.strategy=shuffle
. Další informace o strategii náhodného prohazování a výkonu najdete v tématu dotaz náhodného prohazování.
Podporované operátory pro nativní strategie a prohazování
Následující seznam operátorů lze použít v poddotazech s nativními strategiemi nebo prohazování:
- count
- zřetelný
- rozšířit
- make-series
- mv-apply
- mv-expand
- udělat rozbor
- parse-where
- projekt
- pryč od projektu
- zachování projektu
- přejmenování projektu
- změna pořadí projektu
- zmenšit
- ukázka
- sample-distinct
- skenovat
- search
- serializovat
- sort
- shrnout
- vzít
- vrchol
- top-hitters
- top-vnořené
- kde
Poznámka:
- Operátory, které odkazují na jiný zdroj tabulky než oddíly podtable, nejsou kompatibilní se strategiemi
native
.shuffle
Například spojení, sjednocení, externí data a vyhodnocení (moduly plug-in). V takových scénářích se uchýlíte ke starší strategii. - Operátor forku není podporován pro žádný typ strategie, protože poddotaz musí vrátit jeden tabulkový výsledek.
Strategie starší verze
Z historických důvodů legacy
je strategie výchozí strategií. Doporučujeme však upřednostňovat nativní strategie nebo strategie náhodného prohazování , protože legacy
přístup je omezený na 64 oddílů a je méně efektivní.
V některých scénářích legacy
může být strategie nezbytná kvůli podpoře zahrnutí tabulkového zdroje do poddotazů. V takových případech může poddotaz odkazovat pouze na klíčový sloupec Sloupec ze vstupního tabulkového zdroje T. Pokud chcete odkazovat na sloupec, použijte syntaxi toscalar(
Sloupec)
.
Pokud je poddotaz tabulkovou transformací bez tabulkového zdroje, zdroj je implicitní a je založený na oddílech podtable.
Pokud chcete tuto strategii použít, určete hint.strategy=legacy
nebo vynět jakoukoli jinou indikaci strategie.
Poznámka:
Pokud sloupec oddílu Sloupec obsahuje více než 64 jedinečných hodnot, dojde k chybě.
Příklady
Vyhledání nejvyšších hodnot
V některých případech je výkonnější a jednodušší psát dotaz pomocí operátoru partition
než pomocí operátoru top-nested
. Následující dotaz spustí výpočet summarize
poddotazů a top
pro každý z nich State
začíná výrazem W
:"WYOMING", "WASHINGTON", "WEST VIRGINIA" a "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
)
Výstup
Typ události | State | Události | Zranění |
---|---|---|---|
Krupobití | WYOMING | 108 | 0 |
Velký vítr | WYOMING | 81 | 5 |
Zimní bouře | WYOMING | 72 | 0 |
Silné sněžení | WASHINGTONSKÝ | 82 | 0 |
Velký vítr | WASHINGTONSKÝ | 58 | 13 |
Ničivý požár | WASHINGTONSKÝ | 29 | 0 |
Větrná bouře | ZÁPADNÍ VIRGINIE | 180 | 0 |
Krupobití | ZÁPADNÍ VIRGINIE | 103 | 0 |
Počasí v zimě | ZÁPADNÍ VIRGINIE | 88 | 0 |
Větrná bouře | WISCONSIN | 416 | 0 |
Zimní bouře | WISCONSIN | 310 | 0 |
Krupobití | WISCONSIN | 303 | 0 |
Nativní strategie
Následující dotaz vrátí prvních 2 EventType
hodnot TotalInjuries
pro každý State
, který začíná na "W":
StormEvents
| where State startswith 'W'
| partition hint.strategy = native by State
(
summarize TotalInjueries = sum(InjuriesDirect) by EventType
| top 2 by TotalInjueries
)
Výstup
Typ události | TotalInjueries |
---|---|
Tornádo | 4 |
Krupobití | 0 |
Větrná bouře | 0 |
Nadměrné teplo | 0 |
Velký vítr | 13 |
Lightning | 5 |
Velký vítr | 5 |
Lavina | 3 |
Strategie náhodného prohazu
Následující dotaz vrátí prvních 3 DamagedProperty
hodnoty foreach EpisodeId
a sloupce EpisodeId
a State
.
StormEvents
| partition hint.strategy=shuffle by EpisodeId
(
top 3 by DamageProperty
| project EpisodeId, State, DamageProperty
)
| count
Výstup
Počet |
---|
22345 |
Starší strategie s explicitním zdrojem
Následující dotaz spustí dva poddotazy:
- Když
x == 1
dotaz vrátí všechny řádky, kteréStormEvents
majíInjuriesIndirect == 1
. - Když
x == 2
dotaz vrátí všechny řádky, kteréStormEvents
majíInjuriesIndirect == 2
.
Konečným výsledkem je sjednocení těchto dvou poddotazů.
range x from 1 to 2 step 1
| partition hint.strategy=legacy by x {StormEvents | where x == InjuriesIndirect}
| count
Výstup
Počet |
---|
113 |
Referenční informace k oddílům
Následující příklad ukazuje, jak pomocí operátoru as dát "name" každému datovému oddílu a pak tento název znovu použít v poddotazu. Tento přístup je relevantní pouze pro strategii legacy
.
T
| partition by Dim
(
as Partition
| extend MetricPct = Metric * 100.0 / toscalar(Partition | summarize sum(Metric))
)