Partilhar via


Deixar declaração

Aplica-se a: ✅Microsoft FabricAzure Data ExplorerAzure MonitorMicrosoft 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, dynamice 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