Istruzione let

Usare l'istruzione let per impostare un nome di variabile uguale a un'espressione o a una funzione oppure per creare viste.

let le istruzioni sono utili per:

  • Suddividere un'espressione complessa in più parti, ognuna rappresentata da una variabile.
  • Definizione di costanti esterne al corpo della query per la leggibilità.
  • Definizione di una variabile una sola volta e di usarla più volte all'interno di una query.

Se la variabile precedentemente rappresentava un altro valore, ad esempio nelle istruzioni annidate, si applica l'istruzione più let interna.

Per ottimizzare più usi dell'istruzione all'interno let di una singola query, vedere Ottimizzare le query che usano espressioni denominate.

Sintassi: espressioni scalari o tabulari

letNome=Espressione

Parametri

Nome Tipo Obbligatoria Descrizione
Nome string Nome della variabile. È possibile eseguire l'escape del nome con parentesi quadre. Ad esempio, ["Name with spaces"].
Espressione string Espressione con un risultato scalare o tabulare. Ad esempio, un'espressione con un risultato scalare sarebbe let one=1;, e un'espressione con un risultato tabulare sarebbe let RecentLog = Logs \| where Timestamp > ago(1h).

Sintassi: visualizzazione o funzione

letNome= [] [viewTabularArgName [ArgName:*),(:ArgType ], ... ] ){(FunctionBody}

letNome= [] [view[TabularArgName[AttributeName:AttributeType:(] ( [, ... ] ) ] , [ArgName: *ArgType, ...]] ){FunctionBody}

Parametri

Nome Tipo Obbligatoria Description
FunctionBody string Espressione che restituisce una funzione definita dall'utente.
view string Viene visualizzato solo in un'istruzione senza let parametri senza argomenti. Se usato, l'istruzione let viene inclusa nelle query con un operatore con selezione union con caratteri jolly delle tabelle/viste.
TabularArgName string Nome dell'argomento tabulare. Può essere visualizzato in FunctionBody ed è associato a un determinato valore quando viene richiamata la funzione definita dall'utente.
AttributeName: AttributeType string Nome e tipo dell'attributo. Parte della definizione dello schema di tabella, che include un set di attributi con i relativi tipi.
ArgName: ArgType string Nome e tipo dell'argomento scalare. Il nome può essere visualizzato in FunctionBody ed è associato a un determinato valore quando viene richiamata la funzione definita dall'utente. Gli unici tipi supportati sono bool, stringdynamiclongdatetimetimespanreale gli alias a questi tipi.

Nota

  • È possibile usare (*) per l'espressione tabulare.
  • Quando si usa un'espressione tabulare come parte di una funzione definita dall'utente, le colonne non possono essere accessibili come parte della funzione.
  • Gli argomenti tabulari vengono visualizzati prima degli argomenti scalari.
  • Le due istruzioni devono essere separate da un punto e virgola.

Esempio

Definire i valori scalari

Nell'esempio seguente viene usata un'istruzione espressione scalare.

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

Nell'esempio seguente viene associato il nome some number usando la notazione e quindi lo usa in un'istruzione ['name'] espressione tabulare.

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

Creare una funzione definita dall'utente con il calcolo scalare

Questo esempio usa l'istruzione let con argomenti per il calcolo scalare. La query definisce la funzione MultiplyByN per moltiplicare due numeri.

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

Output

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

Creare una funzione definita dall'utente che taglia l'input

Nell'esempio seguente vengono rimossi quelli iniziali e finali dall'input.

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

Output

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

Usare più istruzioni let

Questo esempio definisce due istruzioni let in cui un'istruzione (foo2) usa un altro valore (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

result
50

Creare una vista o una tabella virtuale

Questo esempio illustra come usare un'istruzione let per creare una view tabella virtuale o .

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
Range10 5
Range20 5

Usare una funzione di materializzazione

La funzione materialize() consente di memorizzare nella cache i risultati della sottoquery durante l'esecuzione della query. Quando si usa la materialize() funzione , i dati vengono memorizzati nella cache e qualsiasi chiamata successiva del risultato usa i dati memorizzati nella 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

Giorno 1 Giorno 2 Percentuale
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

Uso di istruzioni let annidate

Le istruzioni let nidificate sono consentite, incluse all'interno di un'espressione di funzione definita dall'utente. Le istruzioni e gli argomenti let si applicano sia nell'ambito corrente che interno del corpo della funzione.

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