operador de partição
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.
O operador de partição é útil quando você precisa executar uma subconsulta somente em um subconjunto de linhas que pertencem à mesma chave de partição, e não uma consulta de todo o conjunto de dados. Essas subconsultas podem incluir funções agregadas, funções de janela, de N superior e outros.
O operador de partição suporta várias estratégias de operação de subconsulta:
- Native - use com uma fonte de dados implícita com milhares de valores de partição de chave.
- Shuffle - use com uma fonte implícita com milhões de valores de partição de chave.
- Legacy - use com uma fonte implícita ou explícita para 64 ou menos valores de partição de chave.
Sintaxe
T|
partition
[ hint.strategy=
Strategy ] [ Dicas ] by
Coluna(
TransformationSubQuery)
T|
partition
[ hint.strategy=legacy
] [ Dicas ] by
coluna{
SubQueryWithSource}
Saiba mais sobre convenções de sintaxe.
Parâmetros
Designação | Tipo | Necessário | Descrição |
---|---|---|---|
T | string |
✔️ | A fonte tabular de entrada. |
Estratégia | string |
O valor legacy , shuffle ou native . Esta dica define a estratégia de execução do operador de partição.
Se nenhuma estratégia for especificada, a estratégia legacy será usada. Para obter mais informações, consulte Strategies. |
|
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 é implicitamente as subtabelas produzidas pelo particionamento dos registros de T. Cada subtabela é 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 instruções let . |
SubQueryWithSource | string |
✔️ | Uma expressão tabular que inclui sua própria fonte tabular, como uma referência de tabela. Esta sintaxe só é suportada com a estratégia herdada. A subconsulta só pode fazer referência à coluna de chave, Coluna, a partir de T. Para fazer referência à coluna, use a sintaxe toscalar( Coluna) .
A expressão deve fornecer apenas um resultado tabular e não deve ter outros tipos de instruções, como instruções let . |
Dicas | string |
Zero ou mais parâmetros separados por espaço na forma de: HintName= Value que controlam o comportamento do operador. Veja as dicas suportadas por tipo de estratégia. |
Dicas suportadas
Nome da dica | Tipo | Estratégia | Descrição |
---|---|---|---|
hint.shufflekey |
string |
embaralhar | A chave de partição usada para executar o operador de partição com a estratégia shuffle . |
hint.materialized |
bool |
legado | Se definido como true , materializa a origem do operador partition . 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 nós de cluster. O valor padrão é 1 .
Por exemplo, se houver partições N e a dica de spread estiver definida como P, as partições N serão processadas por P diferentes nós de cluster 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 suporta várias estratégias de operação de subconsulta: nativo, aleatório e legado.
Observação
A distinção entre as estratégias native
e shuffle
permite que o chamador indique a cardinalidade e a estratégia de execução da subconsulta. Essa escolha pode afetar o tempo que a subconsulta leva para ser concluída, mas não altera o resultado final.
Estratégia nativa
Esta estratégia deve ser aplicada quando o número de valores distintos da chave de partição não é grande, aproximadamente aos milhares.
A subconsulta deve ser uma transformação tabular que não especifique uma fonte tabular. A fonte é implícita e é atribuída de acordo com as partições da subtabela. Apenas determinados operadores suportados 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 embaralhar
Esta estratégia deve ser aplicada quando o número de valores distintos da chave de partição é grande, na casa dos milhões.
A subconsulta deve ser uma transformação tabular que não especifique uma fonte tabular. A fonte é implícita e é atribuída de acordo com as partições da subtabela. Apenas determinados operadores suportados 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 de shuffle, consulte consulta shuffle.
Operadores suportados para as estratégias nativas e shuffle
A seguinte lista de operadores pode ser usada em subconsultas com as estratégias nativas ou shuffle:
- contagem
- distintos
- estender
- série de make-series
- MV-aplicar
- mv-expandir
- analisar
- analisar onde
- projeto
- projeto
- de manutenção de projetos
- projeto renomear
- de reordenação de projeto
- reduzir
- amostra
- distintos da amostra
- varredura
- pesquisa
- serializar
- tipo
- resumir
- tomar
- principais
- top-hitters
- aninhada no topo
- onde
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 estratégias
native
eshuffle
. Por exemplo, ingressar, união, dados externose avaliar (plugins). Para tais cenários, recorra à estratégia de legado . - A bifurcação operador não é suportada 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 estratégia legacy
é a estratégia padrão. No entanto, recomendamos privilegiar as nativas ou estratégias de aleatório, já que a abordagem legacy
é limitada a 64 partições e é menos eficiente.
Em alguns cenários, a estratégia legacy
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, Coluna, a partir da fonte tabular de entrada, T. Para fazer referência à coluna, use a sintaxe toscalar(
Coluna)
.
Se a subconsulta for uma transformação tabular sem uma fonte tabular, a origem estará 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, Coluna, contiver mais de 64 valores distintos.
Exemplos
Os exemplos nesta seção mostram como usar a sintaxe para ajudá-lo a começar.
Os exemplos neste artigo usam tabelas disponíveis publicamente no de cluster de ajuda, como a tabela
StormEvents
no banco de dados Samples.
Os exemplos neste artigo usam tabelas disponíveis publicamente, como a tabela
StormEvents
na análise do tempo dados de exemplo.
Encontrar os melhores valores
Em alguns casos, é mais eficiente e mais fácil escrever uma consulta usando o operador partition
do que usando o operador top-nested
. A consulta a seguir executa uma subconsulta calculando summarize
e top
para cada 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
)
Output
Tipo de Evento | Estado | Publicações | Lesões |
---|---|---|---|
Salve | WYOMING | 108 | 0 |
Vento forte | WYOMING | 81 | 5 |
Tempestade de inverno | WYOMING | 72 | 0 |
Neve pesada | WASHINGTON | 82 | 0 |
Vento forte | WASHINGTON | 58 | 13 |
Incêndio florestal | WASHINGTON | 29 | 0 |
Vento Trovoada | VIRGÍNIA OCIDENTAL | 180 | 1 |
Salve | VIRGÍNIA OCIDENTAL | 103 | 0 |
Tempo de inverno | VIRGÍNIA OCIDENTAL | 88 | 0 |
Vento Trovoada | WISCONSIN | 416 | 1 |
Tempestade de inverno | WISCONSIN | 310 | 0 |
Salve | WISCONSIN | 303 | 1 |
Estratégia nativa
A consulta a seguir retorna os 2 principais valores de EventType
por TotalInjuries
para cada State
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
)
Output
Tipo de Evento | TotalInjueries |
---|---|
Tornado | 4 |
Salve | 1 |
Vento Trovoada | 1 |
Calor excessivo | 0 |
Vento forte | 13 |
Relâmpago | 5 |
Vento forte | 5 |
Avalanche | 3 |
Estratégia de embaralhar
A consulta a seguir retorna os 3 principais valores de DamagedProperty
para cada EpisodeId
e as colunas EpisodeId
e State
.
StormEvents
| partition hint.strategy=shuffle by EpisodeId
(
top 3 by DamageProperty
| project EpisodeId, State, DamageProperty
)
| count
Output
Contagem |
---|
22345 |
Estratégia legada com fonte explícita
A consulta a seguir executa duas subconsultas:
- Quando
x == 1
, a consulta retorna todas as linhas deStormEvents
que tenhamInjuriesIndirect == 1
. - Quando
x == 2
, a consulta retorna todas as linhas deStormEvents
que tenhamInjuriesIndirect == 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
Output
Contagem |
---|
113 |
Referência de partição
O exemplo a seguir mostra como usar o como operador para dar um "nome" a cada partição de dados e, em seguida, reutilizar esse nome dentro da subconsulta. Esta abordagem só é relevante para a estratégia legacy
.
T
| partition by Dim
(
as Partition
| extend MetricPct = Metric * 100.0 / toscalar(Partition | summarize sum(Metric))
)