Compartir a través de


Operador de partición

Cambie los servicios mediante la lista desplegable Versión . Más información sobre la navegación.
Se aplica a: ✅ 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. Estas subconsultas podrían incluir funciones de agregado, funciones de ventana, N principales y otras.

El operador de partición admite varias estrategias de operación de subconsulta:

  • Nativo : use con un origen de datos implícito con miles de valores de partición de clave.
  • Orden aleatorio : use con un origen implícito con millones de valores de partición de clave.
  • Heredado : use con un origen implícito o explícito para 64 o menos valores de partición de clave.

Syntax

T|partition [ hint.strategy=Strategy ] [ Hints ] byColumn(TransformationSubQuery)

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

Obtenga más información sobre las convenciones de sintaxis.

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. Para obtener más información, consulte Estrategias.
Column string ✔️ Nombre de una columna en T cuyos valores determinan cómo particionar el origen tabular de entrada.
TransformationSubQuery string ✔️ Expresión de transformación tabular. El origen es implícitamente las subtables generadas mediante la creación de particiones de los registros de T. Cada subtable es homogéneo en el valor de 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. Esta sintaxis solo se admite con la estrategia heredada. La subconsulta solo puede hacer referencia a la columna de clave, Columna, de T. Para hacer referencia a la columna, use la sintaxis toscalar(Column).

La expresión debe proporcionar solo un resultado tabular y no debe tener otros tipos de instrucciones, como let instrucciones .
Hints string Cero o más parámetros separados por espacios en forma de: HintName=Value que controla el comportamiento del operador. Consulte las sugerencias admitidas por tipo de estrategia.

Sugerencias admitidas

Nombre de sugerencia 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.

Por ejemplo, si hay N particiones y la sugerencia de propagación se establece en P, las particiones N se procesan mediante nodos de clúster diferentes P igualmente, en paralelo o secuencialmente en función de la sugerencia de simultaneidad.

Returns

El operador devuelve una unión de los resultados de las subconsultas individuales.

Strategies

El operador de partición admite varias estrategias de operación de subconsulta: nativa, aleatoria y heredada.

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.

Estrategia nativa

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. Solo se pueden usar determinados operadores admitidos en la subconsulta. No hay ninguna restricción en el número de particiones.

Para usar esta estrategia, especifique hint.strategy=native.

Estrategia de orden aleatorio

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. Solo se pueden usar determinados operadores admitidos en la subconsulta. No hay ninguna restricción en el número de particiones.

Para usar esta estrategia, especifique hint.strategy=shuffle. Para obtener más información sobre la estrategia y el rendimiento aleatorios, consulte consulta de orden aleatorio.

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 . Por ejemplo, join, union, externaldata y evaluate (plugins). Para estos escenarios, recurra a la estrategia heredada.
  • El operador de bifurcación no se admite para ningún tipo de estrategia, ya que la subconsulta debe devolver un único resultado tabular.
  • El operador make-series solo se admite parcialmente en el partition by operador . Solo se admite cuando se especifican los from parámetros y to .

Estrategia heredada

Por razones históricas, la legacy estrategia es la estrategia predeterminada. Sin embargo, se recomienda favorecer las estrategias nativas o aleatorias , ya que el legacy enfoque se limita a 64 particiones y es menos eficaz.

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. En tales casos, la subconsulta solo puede hacer referencia a la columna de clave, Column, desde el origen tabular de entrada, T. Para hacer referencia a la columna, use la sintaxis 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

Se produce un error si la columna de partición, Columna, contiene más de 64 valores distintos.

Examples

Los ejemplos de esta sección muestran cómo usar la sintaxis para ayudarle a empezar.

En los ejemplos de este artículo se usan tablas disponibles públicamente en el clúster de ayuda, como la StormEvents tabla de la base de datos samples .

En los ejemplos de este artículo se usan tablas disponibles públicamente, como la Weather tabla de la galería de ejemplos de Análisis meteorológicos. 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
Viento alto WYOMING 81 5
Tormenta de invierno WYOMING 72 0
Nieve fuerte WASHINGTON 82 0
Viento alto WASHINGTON 58 13
Wildfire WASHINGTON 29 0
Viento de tormenta WEST VIRGINIA 180 1
Hail WEST VIRGINIA 103 0
Clima de invierno WEST VIRGINIA 88 0
Viento de tormenta WISCONSIN 416 1
Tormenta de invierno WISCONSIN 310 0
Hail WISCONSIN 303 1

Estrategia nativa

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
Viento de tormenta 1
Calor excesivo 0
Viento alto 13
Lightning 5
Viento alto 5
Avalanche 3

Estrategia de orden aleatorio

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

Referencia de partición

En el ejemplo siguiente se muestra cómo usar el operador as para asignar un "nombre" a cada partición de datos y, a continuación, reutilizar ese nombre dentro de la subconsulta. 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))
)