Exercício - Introduza variáveis usando a instrução let
Usamos um conjunto de dados meteorológicos para agregar e visualizar dados. Aqui, você aprenderá a usar let
instruções para introduzir variáveis e organizar consultas complexas.
let
As instruções são úteis para dividir uma expressão complexa em várias partes, definir constantes fora do corpo da consulta para legibilidade ou definir uma variável uma vez e usá-la várias vezes dentro de uma consulta. Você pode usar let
instruções para criar consultas complexas bem organizadas. Você pode usar várias let
instruções, cada instrução deve ser seguida por um ponto-e-vírgula (;
).
Você pode usar let
instruções em diferentes tipos de situações. No nível mais simples, você pode definir valores escalares que serão referenciados posteriormente em uma consulta, como int, string, data/hora ou qualquer outro valor. Você pode criar uma exibição filtrada tabular de uma tabela que será usada como a entrada tabular para a consulta. Você também pode criar uma função usando uma let
instrução.
Definir um escalar com uma let
instrução
Lembre-se de que as consultas anteriores foram filtradas em locais ou danos mínimos. Vamos definir esses valores de limite usando uma let
instrução no início da consulta.
A consulta a seguir usa duas let
instruções para definir valores escalares que serão usados posteriormente como parâmetros de entrada na consulta. O primeiro valor definido é um número e o segundo é uma cadeia de caracteres. As let
instruções terminam com ponto e vírgula.
Observe as partes comentadas da consulta que começam com barras duplas (//
). As barras duplas indicam o início de um comentário até o final da linha. Estes são comentários que são ignorados ao executar consultas.
Execute a seguinte consulta:
let MinDamage = 1; // int let EventLocation = "ARIZONA"; // string StormEvents | where State == EventLocation | where DamageCrops + DamageProperty >= MinDamage | summarize Damage=round(avg(DamageProperty + DamageCrops)) by EventType | sort by Damage
Você deve obter resultados parecidos com a seguinte imagem:
Tente alterar o nome do estado ou os números mínimos de danos e execute novamente a consulta. Como mudam os resultados?
Converter um resultado tabular em um valor escalar usando toscalar
dentro de uma let
instrução
Em seguida, vamos examinar uma contagem do tipo de evento mais frequente em função do tempo. Primeiro, você precisa descobrir qual é o tipo de evento mais frequente. Em seguida, você usará esse valor em uma consulta. Use a tabela StormEvents para localizar o EventType superior contando o número de eventos dentro de cada tipo. Use o project
operador para retornar somente a coluna EventType .
Antes de começar a construir a let
instrução, execute a consulta para descobrir o que esse evento realmente é. Isso permite que você verifique se sua consulta está produzindo os resultados esperados.
StormEvents
| summarize count() by EventType
| top 1 by count_
| project EventType
Você deve obter resultados parecidos com a seguinte imagem:
Você notará que a consulta produziu um resultado tabular com uma coluna e uma linha. No entanto, convém convertê-lo em um valor escalar para usar como um valor de filtro em sua consulta principal. Primeiro, defina o nome da variável que queremos introduzir como MostFrequentEventType. Em seguida, você deseja converter o resultado tabular em um valor escalar colocando toda a consulta dentro da toscalar()
função.
As etapas anteriores são resumidas na seguinte let
declaração:
let MostFrequentEventType = toscalar(
StormEvents
| summarize count() by EventType
| top 1 by count_
| project EventType);
Observe que essa instrução por si só não é uma consulta válida, porque uma consulta válida deve conter pelo menos uma instrução que não seja uma let
instrução. No entanto, você pode usar esse valor escalar armazenado em uma consulta. Lembre-se de que você deseja olhar para uma contagem do tempo de evento mais frequente em função do tempo. Você filtrará MostFrequentEventType e, em seguida, resumirá a contagem por um determinado compartimento de tempo.
Neste caso, vejamos os resultados por mês. Você usará a startofmonth()
função, que retorna uma data/hora que representa o início do mês para o valor de data determinado. Nesta consulta, você usará a coluna StartTime como entrada para a startofmonth()
função.
Finalmente, renderize os resultados como um gráfico de colunas para obter um histograma da contagem do tipo de evento mais frequente vinculado por mês.
Execute a seguinte consulta:
let MostFrequentEventType = toscalar( StormEvents | summarize count() by EventType | top 1 by count_ | project EventType); StormEvents | where EventType == MostFrequentEventType | summarize count() by startofmonth(StartTime) | render columnchart
Você deve obter resultados parecidos com a seguinte imagem:
Tente alterar a consulta para mostrar um histograma do tipo de evento menos frequente vinculado por mês e executar novamente a consulta.
Construir uma let
instrução com saída tabular
Os exemplos anteriores criaram um valor escalar armazenado para ser usado como um parâmetro de entrada em uma consulta. No entanto, também é possível usar uma let
instrução para criar dados tabulares que são usados como entrada para uma consulta.
Filtre a tabela StormEvents em eventos que causaram mortes direta ou indiretamente. Em seguida, retorne um subconjunto das colunas usando o
project
operador . Esta instrução fornece uma saída tabular chamada KillerStorms. Use estalet
instrução como a entrada inicial para sua consulta.let KillerStorms = StormEvents | where DeathsDirect + DeathsIndirect > 0 | project State, EventType, Deaths=DeathsDirect + DeathsIndirect;
Em seguida, você pode usar algumas das funções de agregação que aprendeu em unidades anteriores. Execute a seguinte consulta:
let KillerStorms = StormEvents | where DeathsDirect + DeathsIndirect > 0 | project State, EventType, Deaths=DeathsDirect + DeathsIndirect; KillerStorms | summarize DistinctKillerEventTypes=dcount(EventType), TotalDeaths=sum(Deaths) by State | sort by TotalDeaths
Você deve obter resultados parecidos com a seguinte imagem:
Veja os resultados. Todos os eventos são resumidos na coluna DistinctKillerEventTypes as chamadas "tempestades assassinas"?
Criar uma função definida pelo usuário com a let
instrução
Você também pode usar let
instruções para definir funções definidas pelo usuário, que são subconsultas reutilizáveis. Suponha que você queira descobrir qual porcentagem de cada tipo de evento causou danos. Você criará uma função definida pelo usuário que calcula porcentagens e, posteriormente, chamará essa função e especificará quais colunas devem ser usadas para calcular a porcentagem.
Em uma let
instrução, você declarará o nome da função, os argumentos e o corpo usando a seguinte sintaxe geral:
let function=(argument1:datatype, argument2:datatype) {functionbody};
Especificamente, você usará uma função definida pelo usuário para calcular porcentagens. Primeiro, defina o tipo de dados e os argumentos de entrada. Para este exemplo, você usará os seguintes argumentos:
Nome do argumento | Tipo de dados | Description |
---|---|---|
porção | real |
A parte do total de eventos que você deseja calcular a porcentagem de. |
total | real |
O número total de eventos. |
Você arredondará a resposta para duas casas decimais usando a round()
função.
Em conjunto, a função definida pelo usuário descrita pela let
instrução é:
let Pcent = (portion:real, total:real){round(100 * portion / total, 2)};
Use esta
let
instrução na seguinte consulta:let Pcent = (portion: real, total: real) { round(100 * portion / total, 2) }; StormEvents | extend Damage = DamageCrops + DamageProperty | summarize TotalEvents = count(), TotalDamagingEvents = countif(Damage > 0) by EventType | project EventType, TotalDamagingEvents, TotalEvents, Percentage = Pcent(TotalDamagingEvents, TotalEvents) | sort by EventType asc
Você deve obter resultados parecidos com a seguinte imagem:
Reserve um momento para entender os resultados. Tente modificar a consulta para mostrar um detalhamento da porcentagem por tipo de dano e executar novamente a consulta.
Veja os resultados. O que significa a percentagem? Observe que a consulta chama a função Pcent , que definimos na let
instrução. As entradas usadas nessa função são TotalDamagingEvents e TotalEvents, o que significa que você está procurando a porcentagem de eventos que causaram danos.