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 ]byTransformaçõ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, shuffleou 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:

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

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))
)