Compartir a través de


partition operator

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

Note

  • Los operadores que hacen referencia a un origen de tabla distinto de las particiones de subtable no son compatibles con las native estrategias y shuffle . 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. Solo se admite cuando se especifican los from parámetros y to .

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 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. 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 de StormEvents que tienen InjuriesIndirect == 1.
  • Cuando x == 2, la consulta devuelve todas las filas de StormEvents que tienen InjuriesIndirect == 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))
)