operador partition
O operador de partição particiona os registros de sua tabela de entrada em várias subtábulas de acordo com valores em uma coluna de chave. O operador executa uma subconsulta em cada subtable 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 pertencem à mesma chave de partição e não consultar todo o conjunto de dados. Essas subconsultas podem incluir funções de agregação, funções de janela, N superior 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 origem implícita ou explícita para 64 ou menos valores de partição de chave.
Syntax
T|
partition
[ hint.strategy=
Estratégia ] [ Dicas ]by
Transformações de colunaSubQuery(
)
T|
partition
[ hint.strategy=legacy
] [ Hints ] by
{
Column SubQueryWithSource}
Saiba mais sobre as convenções de sintaxe.
Parâmetros
Nome | Tipo | Obrigatório | Descrição |
---|---|---|---|
T | string |
✔️ | A origem 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 origem tabular de entrada. |
TransformationSubQuery | string |
✔️ | Uma expressão de transformação tabular. A origem é implicitamente as subtables produzidas particionando os registros de T. Cada subtável é homogênea no valor de Coluna. 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 origem tabular, como uma referência de tabela. Essa sintaxe só tem suporte com a estratégia herdada. A subconsulta só pode referenciar a coluna de chave, Column, de T. Para fazer referência à coluna, use a coluna de sintaxe) toscalar( .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: Valor HintName= que controlam o comportamento do operador. Confira as dicas com suporte por tipo de estratégia. |
Dicas com suporte
Nome da dica | Tipo | Estratégia | Descrição |
---|---|---|---|
hint.shufflekey |
string |
ordem aleatória | 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 executar em paralelo. O valor padrão é 16 . |
hint.spread |
int |
Legado | Determina como distribuir as partições entre nós de 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 nós de cluster diferentes P igualmente em paralelo/sequencialmente, dependendo da dica de simultaneidade. |
Retornos
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 e 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 em milhares.
A subconsulta deve ser uma transformação tabular que não especifique uma origem tabular. A origem é implícita e é atribuída de acordo com as partições subtable. Somente determinados operadores com suporte podem ser usados na subconsulta. Não há nenhuma restrição no 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, em milhões.
A subconsulta deve ser uma transformação tabular que não especifique uma origem tabular. A origem é implícita e é atribuída de acordo com as partições subtable. Somente determinados operadores com suporte podem ser usados na subconsulta. Não há nenhuma restrição no número de partições.
Para usar essa estratégia, especifique hint.strategy=shuffle
. Para obter mais informações sobre a estratégia e o desempenho do shuffle, consulte shuffle query.
Operadores com suporte 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:
- contagem
- 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
- início
- top-hitters
- top-nested
- where
Observação
- Operadores que fazem referência a uma fonte de tabela diferente das partições subtable não são compatíveis com as
native
estratégias eshuffle
. Por exemplo, junção, união, externaldata e avaliação (plug-ins). Para esses cenários, recorra à estratégia herdada. - O operador fork não tem suporte para nenhum tipo de estratégia, pois a subconsulta deve retornar um único resultado tabular.
Estratégia herdada
Por motivos históricos, 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 referenciar a coluna de chave, Column, da origem tabular de entrada, T. Para fazer referência à coluna, use a coluna de sintaxe)
toscalar(
.
Se a subconsulta for uma transformação tabular sem uma origem tabular, a origem será implícita e será baseada nas partições subtable.
Para usar essa estratégia, especifique hint.strategy=legacy
ou omita qualquer outra indicação de estratégia.
Observação
Um erro ocorrerá se a coluna de partição, Column, contiver mais de 64 valores distintos.
Exemplos
Localizar os principais valores
Em alguns casos, é mais eficaz e fácil gravar uma consulta usando o operador do partition
que usando o top-nested
operador . A consulta a seguir executa um cálculo de subconsulta summarize
e top
para cada State
um 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 | VIRGÍNIA OCIDENTAL | 180 | 1 |
Granizo | VIRGÍNIA OCIDENTAL | 103 | 0 |
Clima de Inverno | VIRGÍNIA OCIDENTAL | 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 dois 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 | TotalInjueries |
---|---|
Tornado | 4 |
Granizo | 1 |
Thunderstorm Wind | 1 |
Calor excessivo | 0 |
Vento Forte | 13 |
Lightning | 5 |
Vento Forte | 5 |
Avalanche | 3 |
Estratégia de ordem aleatória
A consulta a seguir retorna os três 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
Contagem |
---|
22345 |
Estratégia herdada com origem explícita
A consulta a seguir executa duas subconsultas:
- Quando
x == 1
, a consulta retorna todas as linhas deStormEvents
que têmInjuriesIndirect == 1
. - Quando
x == 2
, a consulta retorna todas as linhas deStormEvents
que têmInjuriesIndirect == 2
.
O resultado final é a união dessas duas subconsultas.
range x from 1 to 2 step 1
| partition hint.strategy=legacy by x {StormEvents | where x == InjuriesIndirect}
| count
Saída
Contagem |
---|
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 reutilizar esse nome dentro da subconsulta. Essa abordagem só é relevante para a legacy
estratégia.
T
| partition by Dim
(
as Partition
| extend MetricPct = Metric * 100.0 / toscalar(Partition | summarize sum(Metric))
)
Comentários
https://aka.ms/ContentUserFeedback.
Em breve: Ao longo de 2024, eliminaremos os problemas do GitHub como o mecanismo de comentários para conteúdo e o substituiremos por um novo sistema de comentários. Para obter mais informações, consulteEnviar e exibir comentários de