Operador partition

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.

Este operador es útil cuando necesita realizar una subconsulta solo en un subconjunto de filas que pertenece a la misma clave de partición y no consultar todo el conjunto de datos. 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 [ Strategy ] [ hint.strategy=Hints ] byColumn(TransformationSubQuery)

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

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

Parámetros

Nombre Tipo Requerido Descripción
T string ✔️ Origen tabular de entrada.
Estrategia 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, vea Estrategias.
Columna 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 .
Sugerencias string Cero o más parámetros separados por espacios en forma de: HintName=Value que controlan el comportamiento del operador. Consulte las sugerencias admitidas por tipo de estrategia.

Sugerencias admitidas

Nombre de la sugerencia Tipo Estrategia Descripción
hint.shufflekey string shuffle Clave de partición usada para ejecutar el operador de partición con la shuffle estrategia.
hint.materialized bool Legado Si se establece en true, materializará el origen del partition operador. El valor predeterminado es false.
hint.concurrency int Legado Determina cuántas particiones se van a ejecutar en paralelo. El valor predeterminado es 16.
hint.spread int Legado 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 N particiones se procesarán mediante nodos de clúster diferentes P igualmente en paralelo o secuencialmente en función de la sugerencia de simultaneidad.

Devoluciones

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

Estrategias

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

Nota

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 subtables. 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 se debe aplicar 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 subtables. 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 de orden aleatorio y el rendimiento, consulte consulta aleatoria.

Operadores admitidos para las estrategias nativas y aleatorias

La siguiente lista de operadores se puede usar en subconsultas con las estrategias nativas o aleatorias:

Nota

  • Los operadores que hacen referencia a un origen de tabla distinto de las particiones subtables 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 es compatible con ningún tipo de estrategia, ya que la subconsulta debe devolver un único resultado tabular.

Estrategia heredada

Por motivos históricos, 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.

Nota

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

Ejemplos

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 State una de ellas a partir Wde : "WISCONSIN", "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 
    ) 

Salida

EventType State Eventos Lesiones
Granizo WYOMING 108 0
Viento fuerte WYOMING 81 5
Tormenta invernal WYOMING 72 0
Nieve pesada WASHINGTON 82 0
Viento fuerte WASHINGTON 58 13
Wildfire WASHINGTON 29 0
Viento de tormenta VIRGINIA OCCIDENTAL 180 1
Granizo VIRGINIA OCCIDENTAL 103 0
Clima de invierno VIRGINIA OCCIDENTAL 88 0
Viento de tormenta WISCONSIN 416 1
Tormenta invernal WISCONSIN 310 0
Granizo 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
    )

Salida

EventType TotalInjueries
Tornado 4
Granizo 1
Viento de tormenta 1
Calor excesivo 0
Viento fuerte 13
Lightning 5
Viento fuerte 5
Avalancha 3

Estrategia aleatoria

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

Salida

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 

Salida

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 en 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))
)