Operador partition
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.
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.
Sintaxis
T partition
|
[ hint.strategy=
Strategy ] [ Hints ] by
Column (
TransformationSubQuery )
T |
partition
[ hint.strategy=legacy
] [ Hints ] by
Column {
SubQueryWithSource }
Obtenga más información sobre las convenciones de sintaxis.
Parámetros
Nombre | Type | Obligatorio | Descripción |
---|---|---|---|
T | string |
✔️ | Origen tabular de entrada. |
Estrategia | string |
legacy Valor , shuffle o 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 . |
Sugerencias | 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 | Tipo | Estrategia | Descripción |
---|---|---|---|
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 |
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 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:
- count
- distinct
- extend
- make-series
- 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
Nota:
- Los operadores que hacen referencia a un origen de tabla distinto de las particiones de subtable no son compatibles con las
native
estrategias yshuffle
. 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.
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.
Nota:
Se producirá un error si la columna de partición, Columna, 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 una de ellas State
a partir W
de : "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
)
Salida
EventType | Valor | Eventos | Lesiones |
---|---|---|---|
Granizo | WYOMING | 108 | 0 |
Viento fuerte | WYOMING | 81 | 5 |
Tormenta invernal | WYOMING | 72 | 0 |
Nieve fuerte | 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 |
Alud | 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
Salida
Count |
---|
22345 |
Estrategia heredada con origen explícito
La consulta siguiente ejecuta dos subconsultas:
- Cuando
x == 1
, la consulta devuelve todas las filas deStormEvents
que tienenInjuriesIndirect == 1
. - Cuando
x == 2
, la consulta devuelve todas las filas deStormEvents
que 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
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 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))
)