Deixar declaração
Aplica-se a: ✅Microsoft Fabric✅Azure Data Explorer✅Azure Monitor✅Microsoft Sentinel
Uma instrução let
é usada para definir um nome de variável igual a uma expressão ou função, ou para criar exibições .
let
declarações são úteis para:
- Dividir uma expressão complexa em várias partes, cada uma representada por uma variável.
- Definição de constantes fora do corpo da consulta para legibilidade.
- Definir uma variável uma vez e usá-la várias vezes dentro de uma consulta.
Se a variável representava anteriormente outro valor, por exemplo, em instruções aninhadas, aplica-se a instrução let
mais interna.
Para otimizar vários usos da instrução let
em uma única consulta, consulte Otimizar consultas que usam expressões nomeadas.
Observação
A instrução let
vincula um nome a um cálculo, não ao valor avaliado desse cálculo. Esse comportamento significa que várias referências ao mesmo nome podem retornar valores diferentes devido ao cálculo ser avaliado várias vezes. Se este não for o comportamento desejado, use toscalar() ou materialize().
Sintaxe: Expressões escalares ou tabulares
let
Nome=
expressão
Importante
As instruções devem ser seguidas de ponto-e-vírgula. Não pode haver linhas em branco entre as instruções let ou entre as instruções let e outras instruções de consulta.
Saiba mais sobre convenções de sintaxe.
Parâmetros
Designação | Tipo | Necessário | Descrição |
---|---|---|---|
Nome | string |
✔️ | O nome da variável. Você pode escapar do nome entre colchetes. Por exemplo, ["Name with spaces"] . |
Expressão | 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: Vista ou função
let
Nome=
[view
] (
[ Parâmetros ])
{
FunctionBody}
Importante
As instruções devem ser seguidas de ponto-e-vírgula. Não pode haver linhas em branco entre as instruções let ou entre as instruções let e outras instruções de consulta.
Saiba mais sobre convenções de sintaxe.
Parâmetros
Designação | Tipo | Necessário | Descrição |
---|---|---|---|
FunctionBody | string |
✔️ | Uma expressão que produz uma função definida pelo usuário. |
view |
string |
Apenas relevante para uma declaração let sem parâmetros. Quando usada, a instrução let é incluída em consultas com um operador de union com seleção curinga das tabelas/exibições. Para obter um exemplo, consulte Criar um modo de exibição ou tabela virtual. |
|
Parâmetros | string |
Zero ou mais parâmetros de função tabular ou escalar separados por vírgula. 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 curinga (* ). Se as colunas forem especificadas, o argumento tabular de entrada deverá conter essas colunas. Se um curinga for especificado, o argumento tabular de entrada poderá ter qualquer esquema. Para referenciar colunas no corpo da função, elas devem ser especificadas. Para obter exemplos, consulte argumento tabular com de esquema e argumento tabular comcuringa.Para cada parâmetro de tipo escalar, forneça o nome e o tipo de parâmetro no formato Nome : Tipo. O nome pode aparecer no FunctionBody e é vinculado a um valor específico quando a função definida pelo usuário é invocada. Os únicos tipos suportados são bool , string , long , datetime , timespan , real , dynamic e os aliases para esses tipos. |
Observação
- Os parâmetros tabulares devem aparecer antes dos parâmetros escalares.
- Quaisquer duas instruções devem ser separadas por ponto-e-vírgula.
Exemplos
Os exemplos nesta seção mostram como usar a sintaxe para ajudá-lo a começar.
Os exemplos neste artigo usam tabelas disponíveis publicamente no de cluster de ajuda, como a tabela
StormEvents
no banco de dados Samples.
Os exemplos neste artigo usam tabelas disponíveis publicamente, como a tabela
StormEvents
na análise do tempo dados de exemplo.
Os exemplos de consulta mostram a sintaxe e o uso de exemplo do operador, instrução ou função.
Definir valores escalares
O exemplo a seguir usa 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 a seguir associa o nome some number
usando a notação ['name']
e, em seguida, usa-o em uma instrução de expressão tabular.
let ['some number'] = 20;
range y from 0 to ['some number'] step 5
Output
y |
---|
0 |
5 |
10 |
15 |
20 |
Criar uma função definida pelo usuário com cálculo escalar
Este exemplo usa a instrução let com argumentos para cálculo escalar. A consulta define MultiplyByN
de função 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)
Output
x | Resultado |
---|---|
1 | 5 |
2 | 10 |
3 | 15 |
4 | 20 |
5 | 25 |
Criar uma função definida pelo usuário que corta a entrada
O exemplo a seguir 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))
Output
x | Resultado |
---|---|
10 | 0 |
11 | |
12 | 2 |
13 | 3 |
14 | 4 |
15 | 5 |
Usar várias instruções let
Este exemplo define duas instruções let em que uma instrução (foo2
) usa 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
Output
Resultado |
---|
50 |
Criar uma vista ou tabela virtual
Este exemplo mostra como usar uma instrução let para criar uma tabela virtual ou view
.
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
Output
$table | MyColumn |
---|---|
Autonomia10 | 5 |
Gama20 | 5 |
Usar uma função de materialização
A função materialize()
permite armazenar em cache os resultados da subconsulta durante o tempo de execução da consulta. Quando você usa a função materialize()
, os dados são armazenados em cache e qualquer invocação subsequente do resultado usa dados armazenados 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
Output
Dia 1 | Dia 2 | 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 |
Usando instruções let aninhadas
Instruções let aninhadas são permitidas, inclusive dentro de uma expressão de função definida pelo usuário. Deixe que declarações e argumentos se apliquem tanto no escopo atual quanto no escopo 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 a seguir especifica que o parâmetro table T
deve ter uma coluna State
do tipo string
. A tabela T
pode incluir outras colunas também, mas elas não podem ser referenciadas na função StateState
porque as não são declaradas.
let StateState=(T: (State: string)) { T | extend s_s=strcat(State, State) };
StormEvents
| invoke StateState()
| project State, s_s
Output
Estado | s_s |
---|---|
ATLÂNTICO SUL | ATLÂNTICO ATLÂNTICO SUL |
FLÓRIDA | FLÓRIDAFLORIDA |
FLÓRIDA | FLÓRIDAFLORIDA |
GEÓRGIA | GEORGIAGEORGIA |
MISSISSIPPI | MISSISSIPPIMISSISSIPPI |
... | ... |
Argumento tabular com curinga
O parâmetro de tabela T
pode ter qualquer esquema e a função CountRecordsInTable
funcionará.
let CountRecordsInTable=(T: (*)) { T | count };
StormEvents | invoke CountRecordsInTable()
Output
Contagem |
---|
59,066 |