Instrução let

Uma let instrução é utilizada para definir um nome de variável igual a uma expressão ou função ou para criar vistas.

let as instruções são úteis para:

  • Dividir uma expressão complexa em várias partes, cada uma representada por uma variável.
  • Definir constantes fora do corpo da consulta para legibilidade.
  • Definir uma variável uma vez e utilizá-la várias vezes numa consulta.

Se a variável representava anteriormente outro valor, por exemplo, em instruções aninhadas, aplica-se a instrução mais interna let .

Para otimizar várias utilizações da let instrução numa única consulta, veja Otimizar consultas que utilizam expressões nomeadas.

Nota

A let instrução vincula um nome a um cálculo e não ao valor avaliado desse cálculo. Este comportamento significa que várias referências ao mesmo nome podem devolver valores diferentes devido ao cálculo ser avaliado várias vezes. Se este não for o comportamento pretendido, utilize toscalar() ou materialize().

Sintaxe: expressões escalares ou tabulares

letNome=Expressão

Importante

As instruções let têm de ser seguidas por um ponto e vírgula. Não pode haver linhas em branco entre instruções let ou entre instruções let e outras instruções de consulta.

Saiba mais sobre as convenções de sintaxe.

Parâmetros

Nome Tipo Necessário Descrição
Nome string ✔️ O nome da variável. Pode escapar ao nome com parênteses. Por exemplo, ["Name with spaces"].
Expression string ✔️ Uma expressão com um resultado escalar ou tabular. Por exemplo, uma expressão com um resultado escalar seria let one=1;, e uma expressão com um resultado tabular seria let RecentLog = Logs | where Timestamp > ago(1h).

Sintaxe: Ver ou função

letNome= [view] ([ Parameters ]){FunctionBody}

Importante

As instruções let têm de ser seguidas por um ponto e vírgula. Não pode haver linhas em branco entre instruções let ou entre instruções let e outras instruções de consulta.

Saiba mais sobre as convenções de sintaxe.

Parâmetros

Nome Tipo Necessário Descrição
FunctionBody string ✔️ Uma expressão que produz uma função definida pelo utilizador.
view string Apenas relevante para uma instrução sem let parâmetros. Quando utilizada, a let instrução é incluída em consultas com um union operador com seleção de carateres universais das tabelas/vistas. Por exemplo, veja Criar uma vista ou tabela virtual.
Parâmetros string Zero ou mais parâmetros de função tabular ou escalar separados por vírgulas.

Para cada parâmetro do tipo tabular, o parâmetro deve estar no formato TableName:TableSchema, no qual TableSchema é uma lista separada por vírgulas de colunas no formato ColumnName:ColumnType ou um caráter universal (*). Se forem especificadas colunas, o argumento tabular de entrada tem de conter estas colunas. Se for especificado um caráter universal, o argumento tabular de entrada pode ter qualquer esquema. Para referenciar colunas no corpo da função, têm de ser especificadas. Por exemplo, veja Argumento tabular com esquema e argumento tabular com caráter universal.

Para cada parâmetro do tipo escalar, forneça o nome do parâmetro e o tipo de parâmetro noformato Tipo de Nome:. O nome pode aparecer no FunctionBody e está vinculado a um valor específico quando a função definida pelo utilizador é invocada. Os únicos tipos suportados são bool, , longstring, datetime, timespan, real, e dynamicos aliases para estes tipos.

Nota

  • Os parâmetros tabulares têm de aparecer antes dos parâmetros escalares.
  • As duas instruções têm de ser separadas por ponto e vírgula.

Exemplos

Definir valores escalares

O exemplo seguinte utiliza uma instrução de expressão escalar.

let n = 10;  // number
let place = "Dallas";  // string
let cutoff = ago(62d); // datetime 
Events 
| where timestamp > cutoff 
    and city == place 
| take n

O exemplo seguinte vincula o nome some number com a notação e, em seguida, utiliza-o ['name'] numa instrução de expressão tabular.

let ['some number'] = 20;
range y from 0 to ['some number'] step 5

Criar uma função definida pelo utilizador com cálculo escalar

Este exemplo utiliza a instrução let com argumentos para cálculo escalar. A consulta define a função MultiplyByN para multiplicar dois números.

let MultiplyByN = (val:long, n:long) { val * n };
range x from 1 to 5 step 1 
| extend result = MultiplyByN(x, 5)

Saída

x result
1 5
2 10
3 15
4 20
5 25

Criar uma função definida pelo utilizador que reduz a entrada

O exemplo seguinte remove os à esquerda e à direita da entrada.

let TrimOnes = (s:string) { trim("1", s) };
range x from 10 to 15 step 1 
| extend result = TrimOnes(tostring(x))

Saída

x result
10 0
11
12 2
13 3
14 4
15 5

Utilizar várias instruções let

Este exemplo define duas instruções let em que uma instrução (foo2) utiliza outra (foo1).

let foo1 = (_start:long, _end:long, _step:long) { range x from _start to _end step _step};
let foo2 = (_step:long) { foo1(1, 100, _step)};
foo2(2) | count

Saída

result
50

Criar uma vista ou tabela virtual

Este exemplo mostra-lhe como utilizar uma instrução let para criar uma view tabela ou virtual.

let Range10 = view () { range MyColumn from 1 to 10 step 1 };
let Range20 = view () { range MyColumn from 1 to 20 step 1 };
search MyColumn == 5

Saída

$table MyColumn
Intervalo10 5
Intervalo20 5

Utilizar uma função materializar

A materialize() função permite-lhe colocar em cache os resultados da subconsulta durante o período de execução da consulta. Quando utiliza a materialize() função, os dados são colocados em cache e qualquer invocação subsequente do resultado utiliza dados em cache.

let totalPagesPerDay = PageViews
| summarize by Page, Day = startofday(Timestamp)
| summarize count() by Day;
let materializedScope = PageViews
| summarize by Page, Day = startofday(Timestamp);
let cachedResult = materialize(materializedScope);
cachedResult
| project Page, Day1 = Day
| join kind = inner
(
    cachedResult
    | project Page, Day2 = Day
)
on Page
| where Day2 > Day1
| summarize count() by Day1, Day2
| join kind = inner
    totalPagesPerDay
on $left.Day1 == $right.Day
| project Day1, Day2, Percentage = count_*100.0/count_1

Saída

Dia1 Dia2 Percentagem
2016-05-01 00:00:00.0000000 2016-05-02 00:00:00.0000000 34.0645725975255
2016-05-01 00:00:00.0000000 2016-05-03 00:00:00.0000000 16.618368960101
2016-05-02 00:00:00.0000000 2016-05-03 00:00:00.0000000 14.6291376489636

Utilizar instruções let aninhadas

As instruções let aninhadas são permitidas, incluindo numa expressão de função definida pelo utilizador. Permitir que as instruções e os argumentos se apliquem no âmbito atual e interno do corpo da função.

let start_time = ago(5h); 
let end_time = start_time + 2h; 
T | where Time > start_time and Time < end_time | ...

Argumento tabular com esquema

O exemplo seguinte especifica que o parâmetro T da tabela tem de ter uma coluna State do tipo string. A tabela T também pode incluir outras colunas, mas não podem ser referenciadas na função StateState porque não são declaradas.

let StateState=(T: (State: string)) { T | extend s_s=strcat(State, State) };
StormEvents
| invoke StateState()
| project State, s_s

Saída

Estado s_s
SUL DO ATLÂNTICO SUL DO ATLÂNTICO SOUTHATLANTIC
FLORIDA FLORIDAFLORIDA
FLORIDA FLORIDAFLORIDA
GEÓRGIA GEORGIAGEORGIA
MISSISSIPPI MISSISSIPPIMISSISSIPPI
... ...

Argumento tabular com caráter universal

O parâmetro T da tabela pode ter qualquer esquema e a função CountRecordsInTable funcionará.

let CountRecordsInTable=(T: (*)) { T | count };
StormEvents | invoke CountRecordsInTable()

Saída

de palavras
59,066