Compartilhar via


operador top-nested

Aplica-se a: ✅Microsoft FabricAzure Data Explorer✅Azure MonitorMicrosoft Sentinel

O top-nested operador executa a agregação hierárquica e a seleção de valor.

Imagine que você tenha uma tabela com informações de vendas, como regiões, vendedores e valores vendidos. O top-nested operador pode ajudá-lo a responder a perguntas complexas, como "Quais são as cinco principais regiões por vendas e quem são os três principais vendedores em cada uma dessas regiões?"

Os dados de origem são particionados com base nos critérios definidos na primeira top-nested cláusula, como região. Em seguida, o operador seleciona os principais registros em cada partição usando uma agregação, como adicionar valores de vendas. Cada cláusula subsequente top-nested refina as partições criadas pela cláusula anterior, criando uma hierarquia de grupos mais precisos.

O resultado é uma tabela com duas colunas por cláusula. Uma coluna contém os valores de particionamento, como região, enquanto a outra coluna contém os resultados do cálculo de agregação, como a soma das vendas.

Sintaxe

T top-nested | [ N ] of Expr [ otherswith = ConstExpr] by Agregação [asc | desc] [,
  top-nested ... ]

Saiba mais sobre as convenções de sintaxe.

Parâmetros

Nome Digitar Obrigatória Descrição
T string ✔️ A expressão tabular de entrada.
N int O número de valores principais a serem retornados para esse nível de hierarquia. Se omitido, todos os valores distintos serão retornados.
Expr string ✔️ Uma expressão sobre o registro de entrada que indica qual valor retornar para esse nível de hierarquia. Normalmente, refere-se a uma coluna de T ou envolve um cálculo como bin() em uma coluna. Opcionalmente, defina um nome de coluna de saída como Nome = Expr.
ConstExpr string Se especificado, para cada nível de hierarquia, um registro é adicionado com o valor que é a agregação de todos os registros que não chegaram ao topo.
Agregação string A função de agregação aplicada a registros com o mesmo valor Expr . O resultado determina os principais registros. Consulte Funções de agregação suportadas. Opcionalmente, defina um nome de coluna de saída como Agregação de Nomes = .

Funções de agregação com suporte

As seguintes funções de agregação são suportadas:

Observação

Qualquer combinação algébrica das agregações também é suportada.

Devoluções

Uma tabela com duas colunas para cada cláusula. Uma coluna contém valores exclusivos calculados usando Expr e a outra coluna mostra os resultados obtidos do cálculo de agregação .

Usando a with others cláusula

Usar o top-nested operador com with others adiciona a capacidade de ver seu conteúdo principal contextualizado em um conjunto de dados mais amplo. Avaliar seus dados dessa maneira é valioso ao renderizar os dados visualmente.

Incluir dados de outras colunas

Somente as colunas especificadas como uma top-nested cláusula Expr são exibidas na tabela de saída.

Para incluir todos os valores de uma coluna em um nível específico:

  1. Não especifique o valor de N.
  2. Use o nome da coluna como o valor de Expr.
  3. Use Ignore=max(1) como o valor de Agregação.
  4. Remova a coluna desnecessária Ignore com project-away.

Para obter um exemplo, consulte Eventos mais recentes por estado com outros dados de coluna.

Considerações sobre o desempenho

O número de registros pode crescer exponencialmente com o número de cláusulas, e o crescimento do top-nested registro é ainda mais rápido se o parâmetro N não for especificado. Este operador pode consumir uma quantidade considerável de recursos.

Se a distribuição de agregação for irregular, limite o número de valores distintos a serem retornados especificando N. Em seguida, use a with others = cláusula ConstExpr para ter uma noção do peso de todos os outros casos.

Exemplos

Principais estados danificados, tipos de eventos e locais finais por danos materiais

A consulta a seguir particiona a StormEvents tabela pela State coluna e calcula o dano total à propriedade para cada estado. A consulta seleciona os dois principais estados com a maior quantidade de danos materiais. Nesses dois estados principais, a consulta agrupa os dados e EventType seleciona os três principais tipos de evento com mais danos. Em seguida, a consulta agrupa os dados e EndLocation seleciona o EndLocation com o maior dano. Apenas um EndLocation valor aparece nos resultados, possivelmente devido à grande natureza dos eventos de tempestade ou por não documentar o local final.

StormEvents  // Data source.
| top-nested 2 of State by sum(DamageProperty),       // Top 2 States by total damaged property.
  top-nested 3 of EventType by sum(DamageProperty),   // Top 3 EventType by total damaged property for each State.
  top-nested 1 of EndLocation by sum(DamageProperty)  // Top 1 EndLocation by total damaged property for each EventType and State.
| project State, EventType, EndLocation, StateTotalDamage = aggregated_State, EventTypeTotalDamage = aggregated_EventType, EndLocationDamage = aggregated_EndLocation

Saída

Estado EventType EndLocation EstadoTotalDamage EventTypeTotalDamage EndLocationDamage
CALIFÓRNIA Wildfire 1445937600 1326315000 1326315000
CALIFÓRNIA Vento Forte 1445937600 61320000 61320000
CALIFÓRNIA Fluxo de detritos 1445937600 48000000 48000000
OKLAHOMA Tempestade de gelo 915470300 826000000 826000000
OKLAHOMA Tempestade de inverno 915470300 40027000 40027000
OKLAHOMA Saturação PLATAFORMA 915470300 21485000 20000000

Os cinco principais estados com danos with others materiais agrupados

O exemplo a seguir usa o top-nested operador para identificar os cinco principais estados com mais danos à propriedade e usa a with others cláusula para agrupar propriedades danificadas para todos os outros estados. Em seguida, ele visualiza a propriedade danificada para os cinco principais estados e todos os outros estados como um piechart usando o render comando.

StormEvents
| top-nested 5 of State with others="OtherStates" by sum(DamageProperty)
| render piechart  

Saída

Captura de tela dos cinco principais estados com mais propriedades danificadas e todos os outros estados agrupados separadamente renderizados como um gráfico de pizza.

Eventos mais recentes por estado com outros dados de coluna

A consulta a seguir recupera os dois eventos mais recentes para cada estado dos EUA com detalhes relevantes do evento. Ele usa max(1) dentro de determinadas colunas para propagar dados sem usar a lógica de seleção aninhada superior. As colunas de agregação geradas Ignore são removidas usando project-away.

StormEvents
| top-nested of State by Ignore0=max(1),                  // Partition the data by each unique value of state.
  top-nested 2 of StartTime by Ignore1=max(StartTime),    // Get the 2 most recent events in each state.
  top-nested of EndTime by Ignore2=max(1),                // Append the EndTime for each event.
  top-nested of EpisodeId by Ignore3=max(1)               // Append the EpisodeId for each event.
| project-away Ignore*                                    // Remove the unnecessary aggregation columns.
| order by State asc, StartTime desc                      // Sort results alphabetically and chronologically.

Registros mais recentes por identidade com outros dados de coluna

O exemplo a seguir top-nested extrai os registros mais recentes por identidade e se baseia nos conceitos introduzidos no exemplo anterior. A primeira top-nested cláusula particiona os dados por valores distintos de id uso Ignore0=max(1) como espaço reservado. Para cada id, ele identifica os dois registros mais recentes com base no timestamp. Outras informações são acrescentadas usando um top-nested operador sem especificar uma contagem e usando Ignore2=max(1) como um espaço reservado. Por fim, colunas de agregação desnecessárias são removidas usando o project-away operador.

datatable(id: string, timestamp: datetime, otherInformation: string) // Create a source datatable.
[
    "Barak", datetime(2015-01-01), "1",
    "Barak", datetime(2016-01-01), "2",
    "Barak", datetime(2017-01-20), "3",
    "Donald", datetime(2017-01-20), "4",
    "Donald", datetime(2017-01-18), "5",
    "Donald", datetime(2017-01-19), "6"
]
| top-nested of id by Ignore0=max(1),                     // Partition the data by each unique value of id.
  top-nested 2 of timestamp by Ignore1=max(timestamp),    // Get the 2 most recent events for each state.
  top-nested of otherInformation by Ignore2=max(1)        // Append otherInformation for each event.
| project-away Ignore0, Ignore1, Ignore2                  // Remove the unnecessary aggregation columns.

Saída

ID timestamp otherInformation
Barak 2016-01-01T00:00:00Z 2
Donald 2017-01-19T00:00:00Z 6
Barak 2017-01-20T00:00:00Z 3
Donald 2017-01-20T00:00:00Z 4