Partager via


partition operator

Applies to: ✅Microsoft FabricAzure Data ExplorerAzure MonitorMicrosoft 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 :

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 native les shuffle straté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 by operator. Elle est prise en charge uniquement lorsque les paramètres et from les to paramè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 StormEvents table in the Samples database.

The examples in this article use publicly available tables, such as the Weather table 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 de StormEvents ce type InjuriesIndirect == 1.
  • Quand x == 2, la requête retourne toutes les lignes de StormEvents ce type InjuriesIndirect == 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))
)