Partager via


partition, opérateur

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.

Cet opérateur 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 pas interroger l’ensemble du jeu de données. Ces sous-requêtes peuvent inclure des fonctions d’agrégation, des fonctions de fenêtre, des N principaux et d’autres.

L’opérateur de partition prend en charge plusieurs stratégies d’opération de sous-requête :

  • Natif : utiliser avec une source de données implicite avec des milliers de valeurs de partition clé.
  • Shuffle : utiliser avec une source implicite avec des millions de valeurs de partition de clé.
  • Hérité : utiliser avec une source implicite ou explicite pour les valeurs de partition de clé 64 ou inférieures.

Syntaxe

T partition | [ hint.strategy=Stratégie ] [ Indicateurs ] by Transformation de colonneSubQuery ( )

T | partition [ hint.strategy=legacy ] [ Hints ] by Column { SubQueryWithSource }

En savoir plus sur les conventions de syntaxe.

Paramètres

Nom Type Requise Description
T string ✔️ Source tabulaire d’entrée.
Stratégie 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. Pour plus d’informations, consultez Stratégies.
Colonne string ✔️ Nom d’une colonne dans T dont les valeurs déterminent comment partitionner la source tabulaire d’entrée.
TransformationSubQuery string ✔️ Expression de transformation tabulaire. La source est implicitement les sous-tables produites par le partitionnement des enregistrements de T. Chaque sous-table est homogène sur la valeur de 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. Cette syntaxe est prise en charge uniquement avec la stratégie héritée. La sous-requête ne peut référencer que la colonne clé, Colonne, à partir de T. Pour référencer la colonne, utilisez la colonne de syntaxetoscalar().

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.
Indicateurs string Zéro ou plusieurs paramètres séparés par l’espace sous la forme : Valeur HintName = qui contrôle le comportement de l’opérateur. Consultez les indicateurs pris en charge par type de stratégie.

Indicateurs pris en charge

Nom de l’indicateur Type Stratégie 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 héritage Si la valeur est définie true, matérialise la source de l’opérateur partition . La valeur par défaut est false.
hint.concurrency int héritage Détermine le nombre de partitions à exécuter en parallèle. La valeur par défaut est 16.
hint.spread int héritage Détermine comment distribuer les partitions entre les nœuds de cluster. La valeur par défaut est 1.

Par exemple, s’il existe N partitions et que l’indicateur de propagation est défini sur P, les partitions N sont traitées par des nœuds de cluster différents de manière égale en parallèle/séquentiel en fonction de l’indicateur d’accès concurrentiel.

Retours

L’opérateur retourne une union des résultats des sous-requêtes individuelles.

Stratégies

L’opérateur de partition prend en charge plusieurs stratégies d’opération de sous-requête : native, aléatoire et héritée.

Remarque

La distinction entre les stratégies et shuffle les native 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.

Stratégie native

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. Seuls certains opérateurs pris en charge peuvent être utilisés dans la sous-requête. Il n’existe aucune restriction sur le nombre de partitions.

Pour utiliser cette stratégie, spécifiez hint.strategy=native.

Stratégie de shuffle

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. Seuls certains opérateurs pris en charge peuvent être utilisés dans la sous-requête. Il n’existe aucune restriction sur le nombre de partitions.

Pour utiliser cette stratégie, spécifiez hint.strategy=shuffle. Pour plus d’informations sur la stratégie de shuffle et les performances, consultez requête aléatoire.

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 :

Remarque

  • 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 shuffle les native stratégies. Par exemple, jointure, union, externaldata et évaluation (plug-ins). Pour ces scénarios, vous devez recourir à la stratégie héritée.
  • L’opérateur de duplication n’est pas pris en charge pour un type de stratégie, car la sous-requête doit retourner un résultat tabulaire unique.

Stratégie héritée

Pour des raisons historiques, la legacy stratégie est la stratégie par défaut. Toutefois, nous vous recommandons de favoriser les stratégies natives ou aléatoires , car l’approche legacy est limitée à 64 partitions et est moins efficace.

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. Dans ce cas, la sous-requête ne peut référencer que la colonne clé, Colonne, à partir de la source tabulaire d’entrée, T. Pour référencer la colonne, utilisez la colonne de syntaxetoscalar().

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.

Remarque

Une erreur se produit si la colonne de partition, Colonne, contient plus de 64 valeurs distinctes.

Exemples

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 
    ) 

Sortie

Type d’événement State Événements Préjudices
Grêle WYOMING 108 0
Vent fort WYOMING 81 5
Tempête hivernale WYOMING 72 0
Lourdes chutes de neige WASHINGTON 82 0
Vent fort WASHINGTON 58 13
Feu de forêt WASHINGTON 29 0
Vent d’orage VIRGINIE-OCCIDENTALE 180 1
Grêle VIRGINIE-OCCIDENTALE 103 0
Météo hivernale VIRGINIE-OCCIDENTALE 88 0
Vent d’orage WISCONSIN 416 1
Tempête hivernale WISCONSIN 310 0
Grêle WISCONSIN 303 1

Stratégie native

La requête suivante retourne les 2 EventType premières valeurs par chacune State commençant par TotalInjuries « W » :

StormEvents
| where State startswith 'W'
| partition hint.strategy = native by State
    (
    summarize TotalInjueries = sum(InjuriesDirect) by EventType
    | top 2 by TotalInjueries
    )

Sortie

Type d’événement TotalInjueries
Tornade 4
Grêle 1
Vent d’orage 1
Chaleur excessive 0
Vent fort 13
Lightning 5
Vent fort 5
Avalanche 3

Stratégie de shuffle

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

Sortie

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 

Sortie

Count
113

Informations de référence sur la partition

L’exemple suivant montre comment utiliser l’opérateur en tant qu’opérateur pour donner un « nom » à chaque partition de données, puis réutiliser ce nom dans la sous-requête. 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))
)