Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Applies to: ✅Microsoft Fabric✅Azure Data Explorer✅Azure Monitor✅Microsoft Sentinel
L’opérateur de partition partition partitionne les enregistrements de sa table d’entrée en plusieurs sous-tables en fonction des valeurs d’une colonne clé. L’opérateur exécute une sous-requête sur chaque sous-table et produit une table de sortie unique qui correspond à l’union des résultats de toutes les sous-requêtes.
L’opérateur de partition est utile lorsque vous devez effectuer une sous-requête uniquement sur un sous-ensemble de lignes appartenant à la même clé de partition, et non une requête de l’ensemble du jeu de données. These subqueries could include aggregate functions, window functions, top N and others.
L’opérateur de partition prend en charge plusieurs stratégies d’opération de sous-requête :
- Native - use with an implicit data source with thousands of key partition values.
- Shuffle - use with an implicit source with millions of key partition values.
- Legacy - use with an implicit or explicit source for 64 or less key partition values.
Syntax
T|partition [ hint.strategy=Strategy ] [ Hints ] byColumn(TransformationSubQuery)
T|partition [ hint.strategy=legacy ] [ Hints ] byColumn{SubQueryWithSource}
Learn more about syntax conventions.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| T | string |
✔️ | Source tabulaire d’entrée. |
| Strategy | string |
legacyValeur , shuffleou native. Cet indicateur définit la stratégie d’exécution de l’opérateur de partition.
Si aucune stratégie n’est spécifiée, la legacy stratégie est utilisée. For more information, see Strategies. |
|
| Column | string |
✔️ | The name of a column in T whose values determine how to partition the input tabular source. |
| TransformationSubQuery | string |
✔️ | Expression de transformation tabulaire. The source is implicitly the subtables produced by partitioning the records of T. Each subtable is homogenous on the value of Column.
L’expression ne doit fournir qu’un seul résultat tabulaire et ne doit pas avoir d’autres types d’instructions, tels que let des instructions. |
| SubQueryWithSource | string |
✔️ | Expression tabulaire qui inclut sa propre source tabulaire, telle qu’une référence de table. This syntax is only supported with the legacy strategy. The subquery can only reference the key column, Column, from T. To reference the column, use the syntax toscalar(Column).
L’expression ne doit fournir qu’un seul résultat tabulaire et ne doit pas avoir d’autres types d’instructions, tels que let des instructions. |
| Hints | string |
Zero or more space-separated parameters in the form of: HintName=Value that control the behavior of the operator. See the supported hints per strategy type. |
Supported hints
| Hint name | Type | Strategy | Description |
|---|---|---|---|
hint.shufflekey |
string |
shuffle | Clé de partition utilisée pour exécuter l’opérateur de partition avec la shuffle stratégie. |
hint.materialized |
bool |
legacy | Si la valeur est true, matérialise la source de l’opérateur partition. La valeur par défaut est false. |
hint.concurrency |
int |
legacy | Détermine le nombre de partitions à exécuter en parallèle. La valeur par défaut est 16. |
hint.spread |
int |
legacy | Détermine comment distribuer les partitions entre les nœuds de cluster. La valeur par défaut est 1.
For example, if there are N partitions and the spread hint is set to P, then the N partitions are processed by P different cluster nodes equally, in parallel/sequentially depending on the concurrency hint. |
Returns
L’opérateur retourne une union des résultats des sous-requêtes individuelles.
Strategies
The partition operator supports several strategies of subquery operation: native, shuffle, and legacy.
Note
La distinction entre les stratégies et native les shuffle stratégies permet à l’appelant d’indiquer la cardinalité et la stratégie d’exécution de la sous-requête. Ce choix peut affecter le temps nécessaire à la fin de la sous-requête, mais ne modifie pas le résultat final.
Native strategy
Cette stratégie doit être appliquée lorsque le nombre de valeurs distinctes de la clé de partition n’est pas volumineux, à peu près dans les milliers.
La sous-requête doit être une transformation tabulaire qui ne spécifie pas de source tabulaire. La source est implicite et est affectée en fonction des partitions de sous-tables. Only certain supported operators can be used in the subquery. Il n’existe aucune restriction sur le nombre de partitions.
Pour utiliser cette stratégie, spécifiez hint.strategy=native.
Shuffle strategy
Cette stratégie doit être appliquée lorsque le nombre de valeurs distinctes de la clé de partition est important, dans les millions.
La sous-requête doit être une transformation tabulaire qui ne spécifie pas de source tabulaire. La source est implicite et est affectée en fonction des partitions de sous-tables. Only certain supported operators can be used in the subquery. Il n’existe aucune restriction sur le nombre de partitions.
Pour utiliser cette stratégie, spécifiez hint.strategy=shuffle. For more information about shuffle strategy and performance, see shuffle query.
Opérateurs pris en charge pour les stratégies natives et aléatoires
La liste suivante d’opérateurs peut être utilisée dans les sous-requêtes avec les stratégies natives ou aléatoires :
- count
- distinct
- extend
- make-series (partially supported, see note)
- mv-apply
- mv-expand
- parse
- parse-where
- project
- project-away
- project-keep
- project-rename
- project-reorder
- reduce
- sample
- sample-distinct
- scan
- search
- serialize
- sort
- summarize
- take
- top
- top-hitters
- top-nested
- where
Note
- Les opérateurs qui référencent une source de table autre que les partitions de sous-tables ne sont pas compatibles avec les stratégies et
nativelesshufflestratégies. For example, join, union, externaldata, and evaluate (plugins). For such scenarios, resort to the legacy strategy. - The fork operator isn't supported for any strategy type, as the subquery must return a single tabular result.
- The make-series operator is only partially supported within the
partition byoperator. Elle est prise en charge uniquement lorsque les paramètres etfromlestoparamètres sont spécifiés.
Legacy strategy
Pour des raisons historiques, la legacy stratégie est la stratégie par défaut. However, we recommend favoring the native or shuffle strategies, as the legacy approach is limited to 64 partitions and is less efficient.
Dans certains scénarios, la legacy stratégie peut être nécessaire en raison de sa prise en charge de l’inclusion d’une source tabulaire dans la sous-requête. In such cases, the subquery can only reference the key column, Column, from the input tabular source, T. To reference the column, use the syntax toscalar(Column).
Si la sous-requête est une transformation tabulaire sans source tabulaire, la source est implicite et est basée sur les partitions de sous-tables.
Pour utiliser cette stratégie, spécifiez hint.strategy=legacy ou omettez toute autre indication de stratégie.
Note
An error occurs if the partition column, Column, contains more than 64 distinct values.
Examples
Les exemples de cette section montrent comment utiliser la syntaxe pour vous aider à commencer.
The examples in this article use publicly available tables in the help cluster, such as the
StormEventstable in the Samples database.
The examples in this article use publicly available tables, such as the
Weathertable in the Weather analytics sample gallery. Vous devrez peut-être modifier le nom de la table dans l’exemple de requête pour qu’elle corresponde à la table de votre espace de travail.
Rechercher les principales valeurs
Dans certains cas, il est plus performant et plus facile d’écrire une requête à l’aide de l’opérateur partition que d’utiliser l’opérateur top-nested . La requête suivante exécute un calcul de sous-requête summarize et top pour chacun State commençant Wpar : « WYOMING », « WASHINGTON », « WEST VIRGINIA » et « 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 | State | Events | Injuries |
|---|---|---|---|
| Hail | WYOMING | 108 | 0 |
| High Wind | WYOMING | 81 | 5 |
| Winter Storm | WYOMING | 72 | 0 |
| Heavy Snow | WASHINGTON | 82 | 0 |
| High Wind | WASHINGTON | 58 | 13 |
| Wildfire | WASHINGTON | 29 | 0 |
| Thunderstorm Wind | WEST VIRGINIA | 180 | 1 |
| Hail | WEST VIRGINIA | 103 | 0 |
| Winter Weather | WEST VIRGINIA | 88 | 0 |
| Thunderstorm Wind | WISCONSIN | 416 | 1 |
| Winter Storm | WISCONSIN | 310 | 0 |
| Hail | WISCONSIN | 303 | 1 |
Native strategy
La requête suivante retourne les 2 EventType premières valeurs par chacune TotalInjuries commençant par State « 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 |
| Hail | 1 |
| Thunderstorm Wind | 1 |
| Excessive Heat | 0 |
| High Wind | 13 |
| Lightning | 5 |
| High Wind | 5 |
| Avalanche | 3 |
Shuffle strategy
La requête suivante retourne les 3 DamagedProperty premières valeurs foreach EpisodeId et les colonnes EpisodeId et State.
StormEvents
| partition hint.strategy=shuffle by EpisodeId
(
top 3 by DamageProperty
| project EpisodeId, State, DamageProperty
)
| count
Output
| Count |
|---|
| 22345 |
Stratégie héritée avec une source explicite
La requête suivante exécute deux sous-requêtes :
- Quand
x == 1, la requête retourne toutes les lignes deStormEventsce typeInjuriesIndirect == 1. - Quand
x == 2, la requête retourne toutes les lignes deStormEventsce typeInjuriesIndirect == 2.
Le résultat final est l’union de ces deux sous-requêtes.
range x from 1 to 2 step 1
| partition hint.strategy=legacy by x {StormEvents | where x == InjuriesIndirect}
| count
Output
| Count |
|---|
| 113 |
Partition reference
The following example shows how to use the as operator to give a "name" to each data partition and then reuse that name within the subquery. Cette approche s’applique uniquement à la legacy stratégie.
T
| partition by Dim
(
as Partition
| extend MetricPct = Metric * 100.0 / toscalar(Partition | summarize sum(Metric))
)