Compartilhar via


operador partition

Aplica-se a: ✅Microsoft FabricAzure Data Explorer✅Azure 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.

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:

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