Operátor partition
Operátor oddílu rozdělí záznamy ze své vstupní tabulky do více podtables podle hodnot v klíčovém sloupci. Operátor spustí poddotaz pro každou podtabulku 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 jenom na podmnožinu řádků, která patří do stejného klíče oddílu, a ne dotazovat se na celou datovou sadu. Tyto poddotazy můžou zahrnovat agregační funkce, funkce oken, prvních 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 hodnotami oddílů klíčů.
- Shuffle – používá se s implicitními zdroji s miliony hodnot oddílů klíčů.
- Starší – používá se s implicitním nebo explicitním zdrojem pro 64 nebo méně hodnot oddílů klíče.
Syntax
T|
partition
[ hint.strategy=
Strategie ] [ Tipy ] 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 | Typ | Vyžadováno | Popis |
---|---|---|---|
T | string |
✔️ | Vstupní tabulkový zdroj. |
Strategie | string |
Hodnota legacy , shuffle nebo native . Tato nápověda definuje strategii provádění operátoru oddílu.Pokud není zadaná žádná strategie, použije se legacy strategie. Další informace najdete 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 |
✔️ | Výraz tabulkové transformace. Zdrojem jsou implicitně podtables vytvořené dělením záznamů T. Každá podtabulka je na hodnotě Column stejnorodá. Výraz musí poskytovat 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ší verzi strategie. Poddotaz může odkazovat pouze na klíčový sloupec Column z T. Pokud chcete odkazovat na sloupec, použijte syntaxi toscalar( Sloupec) .Výraz musí poskytovat pouze jeden tabulkový výsledek a neměl by obsahovat jiné typy příkazů, jako let jsou příkazy. |
Tipy | string |
Žádný nebo více parametrů oddělených mezerami ve tvaru: HintName= Value , které řídí chování operátoru. Projděte si podporované tipy pro jednotlivé typy strategie. |
Podporované rady
Název nápovědy | Typ | Strategie | Description |
---|---|---|---|
hint.shufflekey |
string |
shuffle | Klíč oddílu použitý ke spuštění operátoru oddílu shuffle se strategií. |
hint.materialized |
bool |
Starší | Pokud je nastavená hodnota true , materializuje zdroj operátoru partition . Výchozí hodnota je false . |
hint.concurrency |
int |
Starší | Určuje, kolik oddílů se má spustit paralelně. Výchozí hodnota je 16 . |
hint.spread |
int |
Starší | Určuje způsob distribuce oddílů mezi uzly clusteru. Výchozí hodnota je 1 .Pokud například existuje N oddílů a tip na rozložení je nastavený na P, pak se N oddílů budou zpracovávat různými uzly clusteru P paralelně nebo sekvenčně v závislosti na nápovědě ke 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é a starší.
Poznámka
Rozdíl mezi native
strategiemi a shuffle
umožňuje volajícímu označit kardinalitu a strategii provádění poddotazů. 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 v případě, že 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ů dílčí tabulky. V poddotazu je možné použít pouze některé podporované operátory . Počet oddílů není nijak omezen.
Pokud chcete tuto strategii použít, zadejte hint.strategy=native
.
Strategie náhodného přehrávání
Tato strategie by se měla použít v případě, že 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ů dílčí tabulky. V poddotazu je možné použít pouze některé podporované operátory . Počet oddílů není nijak omezen.
Pokud chcete tuto strategii použít, 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 strategie náhodného prohazování
Následující seznam operátorů lze použít v poddotazech s nativními strategiemi nebo strategiemi náhodného prohazování:
- Počet
- Odlišné
- Rozšířit
- make-series
- mv-apply
- mv-expand
- Analyzovat
- parse-where
- Projektu
- projekt pryč
- project-keep
- přejmenování projektu
- project-reorder
- Snížit
- Ukázka
- sample-distinct
- Skenování
- search
- Serializaci
- Řazení
- Sumarizovat
- take take
- Top
- nejlepší hittery
- horní vnořený
- Kde
Poznámka
- Operátory, které odkazují na jiný zdroj tabulky než oddíly dílčí tabulky, nejsou kompatibilní se strategiemi
native
ashuffle
. Například join, union, externaldata a evaluate (moduly plug-in). V takových scénářích se uchylujte ke starší strategii. - Operátor forku není podporovaný pro žádný typ strategie, protože poddotaz musí vrátit jeden tabulkový výsledek.
Starší verze strategie
Z historických důvodů legacy
je strategie výchozí strategií. Doporučujeme ale 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á, protože podporuje zahrnutí tabulkového zdroje do poddotazu. V takových případech může poddotaz odkazovat pouze na klíčový sloupec Column 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, je zdroj implicitní a je založený na oddílech dílčí tabulky.
Pokud chcete tuto strategii použít, zadejte hint.strategy=legacy
nebo vyněněte jakékoli jiné označení strategie.
Poznámka
Pokud sloupec oddílu Column 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šší napsat dotaz pomocí operátoru partition
než operátor .top-nested
Následující dotaz spustí výpočet poddotaz summarize
a top
pro každý z nich State
: 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 | Stav | Událost | Zranění |
---|---|---|---|
Krupobití | WYOMING | 108 | 0 |
Silný vítr | WYOMING | 81 | 5 |
Zimní bouře | WYOMING | 72 | 0 |
Těžký sníh | WASHINGTON | 82 | 0 |
Silný vítr | WASHINGTON | 58 | 13 |
Wildfire | WASHINGTON | 29 | 0 |
Bouřkový vítr | WEST VIRGINIA | 180 | 1 |
Krupobití | WEST VIRGINIA | 103 | 0 |
Zimní počasí | WEST VIRGINIA | 88 | 0 |
Bouřkový vítr | WISCONSIN | 416 | 1 |
Zimní bouře | WISCONSIN | 310 | 0 |
Krupobití | WISCONSIN | 303 | 1 |
Nativní strategie
Následující dotaz vrátí první 2 EventType
hodnoty podle TotalInjuries
pro každou 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í | 1 |
Bouřkový vítr | 1 |
Nadměrné teplo | 0 |
Silný vítr | 13 |
Lightning | 5 |
Silný vítr | 5 |
Lavina | 3 |
Strategie náhodného shuffle
Následující dotaz vrátí 3 DamagedProperty
nejvyšší 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 zStormEvents
, které majíInjuriesIndirect == 1
. - Když
x == 2
dotaz vrátí všechny řádky zStormEvents
, které 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 "název" každému datovému oddílu a pak tento název znovu použít v rámci poddotaz. 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))
)
Váš názor
https://aka.ms/ContentUserFeedback.
Připravujeme: V průběhu roku 2024 budeme postupně vyřazovat problémy z GitHub coby mechanismus zpětné vazby pro obsah a nahrazovat ho novým systémem zpětné vazby. Další informace naleznete v tématu:Odeslat a zobrazit názory pro