partition, opérateur
L’opérateur de partition partitionne les enregistrements de sa table d’entrée en plusieurs sous-tableaux 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 est 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 qui appartient à la même clé de partition et ne 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, un N supérieur 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és.
- Lecture aléatoire : utilisez avec une source implicite avec des millions de valeurs de partition de clé.
- Hérité : utiliser avec une source implicite ou explicite pour 64 valeurs de partition clé ou moins.
Syntax
T|
partition
[ hint.strategy=
Stratégie ] [ Indicateurs ] by
Transformation de colonneSubQuery(
)
T|
partition
[ hint.strategy=legacy
] [ Indicateurs ] by
Colonne{
SubQueryWithSource}
Découvrez les conventions de syntaxe.
Paramètres
Nom | Type | Obligatoire | Description |
---|---|---|---|
T | string |
✔️ | Source tabulaire d’entrée. |
Stratégie | string |
legacy Valeur , shuffle ou 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 en 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-tableau 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, comme let des instructions. |
SubQueryWithSource | string |
✔️ | Expression tabulaire qui inclut sa propre source tabulaire, telle qu’une référence de table. Cette syntaxe est uniquement prise en charge avec la stratégie héritée. La sous-requête peut uniquement référencer la colonne clé, Colonne, à partir de T. Pour référencer la colonne, utilisez la syntaxe toscalar( Column) .L’expression ne doit fournir qu’un seul résultat tabulaire et ne doit pas avoir d’autres types d’instructions, comme 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 |
lecture aléatoire | 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 sur , 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 seront traitées par des nœuds de cluster différents P de manière parallèle/séquentielle 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.
Notes
La distinction entre les native
stratégies et shuffle
permet à l’appelant d’indiquer la cardinalité et la stratégie d’exécution de la sous-requête. Ce choix peut affecter la durée 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 élevé, à peu près en 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-table. 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 élevé, en 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-table. 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 et les performances de lecture aléatoire, 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 :
- count
- distinct
- extend
- make-series
- mv-apply
- mv-expand
- parse
- parse-where
- project
- project-away
- project-keep
- project-rename
- project-reorder
- reduce
- Échantillon
- sample-distinct
- scan
- search
- serialize
- sort
- summarize
- take
- top
- top-hitters
- top-nested
- where
Notes
- Les opérateurs qui référencent une source de table autre que les partitions subtables ne sont pas compatibles avec les
native
stratégies etshuffle
. Par exemple, rejoindre, union, externaldata et évaluer (plug-ins). Pour de tels scénarios, recourez à la stratégie héritée. - L’opérateur fork n’est pris en charge pour aucun 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 privilégier 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 peut uniquement référencer la colonne clé, Colonne, à partir de la source tabulaire d’entrée, T. Pour référencer la colonne, utilisez la syntaxe 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 sous-tables.
Pour utiliser cette stratégie, spécifiez hint.strategy=legacy
ou omettez toute autre indication de stratégie.
Notes
Une erreur se produit si la colonne de partition, Column, contient plus de 64 valeurs distinctes.
Exemples
Rechercher les valeurs principales
Dans certains cas, il est plus performant et plus facile d’écrire une requête à l’aide de l’opérateur partition
que de l’utiliser top-nested
. La requête suivante exécute une sous-requête de calcul summarize
et top
pour chacune State
d’elles commençant par W
: « 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 | État | Événements | Préjudices |
---|---|---|---|
Grêle | WYOMING | 108 | 0 |
Vent fort | WYOMING | 81 | 5 |
Tempête hivernale | WYOMING | 72 | 0 |
Neige lourde | WASHINGTON | 82 | 0 |
Vent fort | WASHINGTON | 58 | 13 |
Feu de forêt | WASHINGTON | 29 | 0 |
Vent d’orage | WEST VIRGINIA | 180 | 1 |
Grêle | WEST VIRGINIA | 103 | 0 |
Météo hivernale | WEST VIRGINIA | 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 pour chacune State
d’elles qui commence 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 source explicite
La requête suivante exécute deux sous-requêtes :
- Quand
x == 1
, la requête retourne toutes les lignes deStormEvents
qui ontInjuriesIndirect == 1
. - Quand
x == 2
, la requête retourne toutes les lignes deStormEvents
qui ontInjuriesIndirect == 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 |
Référence de partition
L’exemple suivant montre comment utiliser l’opérateur as pour donner un « nom » à chaque partition de données, puis comment 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))
)
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour