Partilhar via


operador de partição

Aplica-se a: ✅Microsoft FabricAzure Data ExplorerAzure MonitorMicrosoft 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 ] byColuna(TransformationSubQuery)

T|partition [ hint.strategy=legacy ] [ Dicas ] bycoluna{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, shuffleou 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:

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 e shuffle. 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 de StormEvents que tenham InjuriesIndirect == 1.
  • Quando x == 2, a consulta retorna todas as linhas de StormEvents que tenham InjuriesIndirect == 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))
)