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
let
Nome=
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
let
Nome=
[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 , , long string , datetime , timespan , real , e dynamic os 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 |
Comentários
https://aka.ms/ContentUserFeedback.
Brevemente: Ao longo de 2024, vamos descontinuar progressivamente o GitHub Issues como mecanismo de feedback para conteúdos e substituí-lo por um novo sistema de feedback. Para obter mais informações, veja:Submeter e ver comentários