operador partition
Aplica-se a: ✅Microsoft Fabric✅Azure Data Explorer✅Azure Monitor✅Microsoft Sentinel
O operador de partição particiona os registros de sua tabela de entrada em várias subtabelas de acordo com os valores em uma coluna de chave. O operador executa uma subconsulta em cada subtabela e produz uma única tabela de saída que é a união dos resultados de todas as subconsultas.
Esse operador é útil quando você precisa executar uma subconsulta somente em um subconjunto de linhas que pertence à mesma chave de partição e não consultar todo o conjunto de dados. Essas subconsultas podem incluir funções agregadas, funções de janela, top N e outras.
O operador de partição dá suporte a várias estratégias de operação de subconsulta:
- Nativo - use com uma fonte de dados implícita com milhares de valores de partição de chave.
- Embaralhar - use com uma fonte implícita com milhões de valores de partição de chave.
- Herdado - use com uma fonte implícita ou explícita para 64 ou menos valores de partição de chave.
Sintaxe
T partition
|
[ hint.strategy=
Estratégia ] [ Dicas ] by
Coluna (
TransformationSubQuery )
T partition
|
[ hint.strategy=legacy
] [ Dicas ] by
Coluna {
SubQueryWithSource }
Saiba mais sobre as convenções de sintaxe.
Parâmetros
Nome | Digitar | Obrigatória | Descrição |
---|---|---|---|
T | string |
✔️ | A fonte tabular de entrada. |
Estratégia | string |
O valor legacy , shuffle , ou native . Essa dica define a estratégia de execução do operador de partição.Se nenhuma estratégia for especificada, a legacy estratégia será usada. Para obter mais informações, consulte Estratégias. |
|
Coluna | string |
✔️ | O nome de uma coluna em T cujos valores determinam como particionar a fonte tabular de entrada. |
TransformationSubQuery | string |
✔️ | Uma expressão de transformação tabular. A fonte são implicitamente as subtabelas produzidas pelo particionamento dos registros de T. Cada subtabela é homogênea no valor de Column. A expressão deve fornecer apenas um resultado tabular e não deve ter outros tipos de instruções, como let instruções. |
SubQueryWithSource | string |
✔️ | Uma expressão tabular que inclui sua própria fonte tabular, como uma referência de tabela. Essa sintaxe só é suportada com a estratégia herdada. A subconsulta só pode fazer referência à coluna de chave, Column, de T. Para fazer referência à coluna, use a sintaxe toscalar( Column) .A expressão deve fornecer apenas um resultado tabular e não deve ter outros tipos de instruções, como let instruções. |
Dicas | string |
Zero ou mais parâmetros separados por espaço na forma de: HintName = Valor que controlam o comportamento do operador. Veja as dicas suportadas por tipo de estratégia. |
Dicas com suporte
Nome da dica | Tipo | Estratégia | Descrição |
---|---|---|---|
hint.shufflekey |
string |
shuffle | A chave de partição usada para executar o operador de partição com a shuffle estratégia. |
hint.materialized |
bool |
legado | Se definido como true , materializará a origem do partition operador. O valor padrão é false . |
hint.concurrency |
int |
legado | Determina quantas partições devem ser executadas em paralelo. O valor padrão é 16 . |
hint.spread |
int |
legado | Determina como distribuir as partições entre os nós do cluster. O valor padrão é 1 .Por exemplo, se houver N partições e a dica de propagação estiver definida como P, as N partições serão processadas por P nós de cluster diferentes igualmente em paralelo/sequencialmente, dependendo da dica de simultaneidade. |
Devoluções
O operador retorna uma união dos resultados das subconsultas individuais.
Estratégias
O operador de partição dá suporte a várias estratégias de operação de subconsulta: nativa, aleatória e herdada.
Observação
A distinção entre as native
estratégias and shuffle
permite que o chamador indique a cardinalidade e a estratégia de execução da subconsulta. Essa escolha pode afetar quanto tempo a subconsulta leva para ser concluída, mas não altera o resultado final.
Estratégia nativa
Essa estratégia deve ser aplicada quando o número de valores distintos da chave de partição não for grande, aproximadamente na casa dos milhares.
A subconsulta deve ser uma transformação tabular que não especifica uma fonte tabular. A fonte é implícita e é atribuída de acordo com as partições da subtabela. Somente determinados operadores com suporte podem ser usados na subconsulta. Não há restrição quanto ao número de partições.
Para usar essa estratégia, especifique hint.strategy=native
.
Estratégia de embaralhamento
Essa estratégia deve ser aplicada quando o número de valores distintos da chave de partição for grande, na casa dos milhões.
A subconsulta deve ser uma transformação tabular que não especifica uma fonte tabular. A fonte é implícita e é atribuída de acordo com as partições da subtabela. Somente determinados operadores com suporte podem ser usados na subconsulta. Não há restrição quanto ao número de partições.
Para usar essa estratégia, especifique hint.strategy=shuffle
. Para obter mais informações sobre estratégia e desempenho aleatório, consulte consulta aleatória.
Operadores suportados para as estratégias nativas e aleatórias
A seguinte lista de operadores pode ser usada em subconsultas com as estratégias nativas ou aleatórias:
- count
- distinct
- extend
- fazer série
- 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
- início
- top-hitters
- top-nested
- where
Observação
- Os operadores que fazem referência a uma fonte de tabela diferente das partições de subtabela não são compatíveis com as
native
estratégias andshuffle
. Por exemplo, join, union, externaldata e evaluate (plugins). Para tais cenários, recorra à estratégia legada. - O operador de bifurcação não tem suporte para nenhum tipo de estratégia, pois a subconsulta deve retornar um único resultado tabular.
Estratégia de legado
Por razões históricas, a legacy
estratégia é a estratégia padrão. No entanto, recomendamos favorecer as estratégias nativas ou aleatórias , pois a legacy
abordagem é limitada a 64 partições e é menos eficiente.
Em alguns cenários, a legacy
estratégia pode ser necessária devido ao seu suporte para incluir uma fonte tabular na subconsulta. Nesses casos, a subconsulta só pode fazer referência à coluna de chave, Column, da fonte tabular de entrada, T. Para fazer referência à coluna, use a sintaxe toscalar(
Column)
.
Se a subconsulta for uma transformação tabular sem uma fonte tabular, a origem será implícita e se baseará nas partições da subtabela.
Para usar essa estratégia, especifique hint.strategy=legacy
ou omita qualquer outra indicação de estratégia.
Observação
Ocorrerá um erro se a coluna de partição, Column, contiver mais de 64 valores distintos.
Exemplos
Encontre os melhores valores
Em alguns casos, é mais eficiente e fácil escrever uma consulta usando o partition
operador do que usando o top-nested
operador. A consulta a seguir executa uma subconsulta calculando summarize
e top
para cada um State
começando com W
: "WYOMING", "WASHINGTON", "WEST VIRGINIA" e "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
)
Saída
EventType | Estado | Eventos | Lesões |
---|---|---|---|
Granizo | WYOMING | 108 | 0 |
Vento Forte | WYOMING | 81 | 5 |
Tempestade de Inverno | WYOMING | 72 | 0 |
Neve Pesada | WASHINGTON | 82 | 0 |
Vento Forte | WASHINGTON | 58 | 13 |
Wildfire | WASHINGTON | 29 | 0 |
Thunderstorm Wind | WEST VIRGINIA | 180 | 1 |
Granizo | WEST VIRGINIA | 103 | 0 |
Clima de Inverno | WEST VIRGINIA | 88 | 0 |
Thunderstorm Wind | WISCONSIN | 416 | 1 |
Tempestade de Inverno | WISCONSIN | 310 | 0 |
Granizo | WISCONSIN | 303 | 1 |
Estratégia nativa
A consulta a seguir retorna os 2 EventType
principais valores por TotalInjuries
para cada State
um que começa com 'W':
StormEvents
| where State startswith 'W'
| partition hint.strategy = native by State
(
summarize TotalInjueries = sum(InjuriesDirect) by EventType
| top 2 by TotalInjueries
)
Saída
EventType | Total de Lesões |
---|---|
Tornado | 4 |
Granizo | 1 |
Thunderstorm Wind | 1 |
Excessive Heat | 0 |
Vento Forte | 13 |
Lightning | 5 |
Vento Forte | 5 |
Avalanche | 3 |
Estratégia de embaralhamento
A consulta a seguir retorna os 3 DamagedProperty
principais valores foreach EpisodeId
e as colunas EpisodeId
e State
.
StormEvents
| partition hint.strategy=shuffle by EpisodeId
(
top 3 by DamageProperty
| project EpisodeId, State, DamageProperty
)
| count
Saída
Count |
---|
22345 |
Estratégia legada com fonte explícita
A consulta a seguir executa duas subconsultas:
- Quando
x == 1
, a consulta retorna todas as linhas queStormEvents
têmInjuriesIndirect == 1
. - Quando
x == 2
, a consulta retorna todas as linhas queStormEvents
têmInjuriesIndirect == 2
.
O resultado final é a união dessas duas subquestões.
range x from 1 to 2 step 1
| partition hint.strategy=legacy by x {StormEvents | where x == InjuriesIndirect}
| count
Saída
Count |
---|
113 |
Referência de partição
O exemplo a seguir mostra como usar o operador as para dar um "nome" a cada partição de dados e, em seguida, reutilizar esse nome na subconsulta. Essa abordagem é relevante apenas para a legacy
estratégia.
T
| partition by Dim
(
as Partition
| extend MetricPct = Metric * 100.0 / toscalar(Partition | summarize sum(Metric))
)