Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Applies to: ✅Microsoft Fabric✅Azure Data Explorer✅Azure Monitor✅Microsoft Sentinel
El operador de partición divide los registros de su tabla de entrada en varias subtables según los valores de una columna de clave. El operador ejecuta una subconsulta en cada subtable y genera una única tabla de salida que es la unión de los resultados de todas las subconsultas.
El operador de partición es útil cuando necesita realizar una subconsulta solo en un subconjunto de filas que pertenecen a la misma clave de partición y no a una consulta del conjunto de datos completo. These subqueries could include aggregate functions, window functions, top N and others.
El operador de partición admite varias estrategias de operación de subconsulta:
- 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 |
✔️ | Origen tabular de entrada. |
| Strategy | string |
legacyValor , shuffleo native. Esta sugerencia define la estrategia de ejecución del operador de partición.
Si no se especifica ninguna estrategia, se usa la legacy estrategia. 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 |
✔️ | Expresión de transformación tabular. The source is implicitly the subtables produced by partitioning the records of T. Each subtable is homogenous on the value of Column.
La expresión debe proporcionar solo un resultado tabular y no debe tener otros tipos de instrucciones, como let instrucciones . |
| SubQueryWithSource | string |
✔️ | Expresión tabular que incluye su propio origen tabular, como una referencia de tabla. 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).
La expresión debe proporcionar solo un resultado tabular y no debe tener otros tipos de instrucciones, como let instrucciones . |
| 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 | Clave de partición que se usa para ejecutar el operador de partición con la shuffle estrategia. |
hint.materialized |
bool |
legacy | Si se establece en true, materializa el origen del operador partition. El valor predeterminado es false. |
hint.concurrency |
int |
legacy | Determina cuántas particiones se van a ejecutar en paralelo. El valor predeterminado es 16. |
hint.spread |
int |
legacy | Determina cómo distribuir las particiones entre los nodos del clúster. El valor predeterminado es 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
El operador devuelve una unión de los resultados de las subconsultas individuales.
Strategies
The partition operator supports several strategies of subquery operation: native, shuffle, and legacy.
Note
La distinción entre las native estrategias y shuffle permite al autor de la llamada indicar la cardinalidad y la estrategia de ejecución de la subconsulta. Esta opción puede afectar al tiempo que tarda la subconsulta en completarse, pero no cambia el resultado final.
Native strategy
Esta estrategia se debe aplicar cuando el número de valores distintos de la clave de partición no es grande, aproximadamente en los miles.
La subconsulta debe ser una transformación tabular que no especifique un origen tabular. El origen es implícito y se asigna según las particiones de la subtable. Only certain supported operators can be used in the subquery. No hay ninguna restricción en el número de particiones.
Para usar esta estrategia, especifique hint.strategy=native.
Shuffle strategy
Esta estrategia debe aplicarse cuando el número de valores distintos de la clave de partición es grande, en los millones.
La subconsulta debe ser una transformación tabular que no especifique un origen tabular. El origen es implícito y se asigna según las particiones de la subtable. Only certain supported operators can be used in the subquery. No hay ninguna restricción en el número de particiones.
Para usar esta estrategia, especifique hint.strategy=shuffle. For more information about shuffle strategy and performance, see shuffle query.
Operadores admitidos para las estrategias nativas y aleatorias
La siguiente lista de operadores se puede usar en subconsultas con las estrategias nativas o aleatorias:
- 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
- Los operadores que hacen referencia a un origen de tabla distinto de las particiones de subtable no son compatibles con las
nativeestrategias yshuffle. 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. Solo se admite cuando se especifican losfromparámetros yto.
Legacy strategy
Por razones históricas, la legacy estrategia es la estrategia predeterminada. However, we recommend favoring the native or shuffle strategies, as the legacy approach is limited to 64 partitions and is less efficient.
En algunos escenarios, la legacy estrategia podría ser necesaria debido a su compatibilidad con la inclusión de un origen tabular en la subconsulta. 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 subconsulta es una transformación tabular sin un origen tabular, el origen es implícito y se basa en las particiones subtables.
Para usar esta estrategia, especifique hint.strategy=legacy o omita cualquier otra indicación de estrategia.
Note
An error occurs if the partition column, Column, contains more than 64 distinct values.
Examples
Los ejemplos de esta sección muestran cómo usar la sintaxis para ayudarle a empezar.
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. Es posible que tenga que modificar el nombre de la tabla en la consulta de ejemplo para que coincida con la tabla del área de trabajo.
Búsqueda de los valores principales
En algunos casos, es más eficaz y fácil escribir una consulta mediante el partition operador que el top-nested operador . La consulta siguiente ejecuta una subconsulta calculando summarize y top para cada una de ellas State a partir Wde : "MSDN", "WASHINGTON", "WEST VIRGINIA" y "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 consulta siguiente devuelve los dos EventType valores principales por TotalInjuries cada uno State que comienza por "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 consulta siguiente devuelve los tres DamagedProperty valores principales de foreach EpisodeId y las columnas EpisodeId y State.
StormEvents
| partition hint.strategy=shuffle by EpisodeId
(
top 3 by DamageProperty
| project EpisodeId, State, DamageProperty
)
| count
Output
| Count |
|---|
| 22345 |
Estrategia heredada con origen explícito
La consulta siguiente ejecuta dos subconsultas:
- Cuando
x == 1, la consulta devuelve todas las filas deStormEventsque tienenInjuriesIndirect == 1. - Cuando
x == 2, la consulta devuelve todas las filas deStormEventsque tienenInjuriesIndirect == 2.
El resultado final es la unión de estas dos subconsultas.
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. Este enfoque solo es relevante para la legacy estrategia.
T
| partition by Dim
(
as Partition
| extend MetricPct = Metric * 100.0 / toscalar(Partition | summarize sum(Metric))
)