Istruzione let
Un'istruzione let
viene usata per impostare un nome di variabile uguale a un'espressione o a una funzione oppure per creare visualizzazioni.
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.
Nota
L'istruzione let
associa un nome a un calcolo, non al valore valutato di tale calcolo. Questo comportamento significa che più riferimenti allo stesso nome possono restituire valori diversi a causa del calcolo valutato più volte. Se questo non è il comportamento desiderato, usare toscalar() o materialize().
Sintassi: espressioni scalari o tabulari
let
Nome=
Espressione
Importante
Le istruzioni let devono essere seguite da un punto e virgola. Non possono essere presenti righe vuote tra istruzioni let o tra istruzioni let e altre istruzioni di query.
Altre informazioni sulle convenzioni di sintassi.
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
let
Nome=
[] (
[view
Parametri ])
{
FunctionBody}
Importante
Le istruzioni let devono essere seguite da un punto e virgola. Non possono essere presenti righe vuote tra istruzioni let o tra istruzioni let e altre istruzioni di query.
Altre informazioni sulle convenzioni di sintassi.
Parametri
Nome | Tipo | Obbligatoria | Descrizione |
---|---|---|---|
FunctionBody | string |
✔️ | Espressione che restituisce una funzione definita dall'utente. |
view |
string |
Solo pertinente per un'istruzione senza let parametri. Se usato, l'istruzione let viene inclusa nelle query con un operatore con selezione union con caratteri jolly delle tabelle/viste. Per un esempio, vedere Creare una vista o una tabella virtuale. |
|
Parametri | string |
Parametri di funzione tabulari o scalari separati da zero o più virgole. Per ogni parametro del tipo tabulare, il parametro deve essere nel formatoTableName TableSchema, in cui TableSchema è un elenco delimitato da virgole di colonne nel formato ColumnName : : ColumnType o un carattere jolly (* ). Se vengono specificate colonne, l'argomento tabulare di input deve contenere queste colonne. Se viene specificato un carattere jolly, l'argomento tabulare di input può avere qualsiasi schema. Per fare riferimento alle colonne nel corpo della funzione, è necessario specificare. Per esempi, vedere Argomento tabulare con schema e argomento tabulare con caratteri jolly.Per ogni parametro del tipo scalare, specificare il nome del parametro e il tipo di parametro nel formato Nome : tipo. 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 , string dynamic long datetime timespan real e gli alias a questi tipi. |
Nota
- I parametri tabulari devono essere visualizzati prima dei parametri 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 | ...
Argomento tabulare con schema
Nell'esempio seguente viene specificato che il parametro T
table deve avere una colonna State
di tipo string
. La tabella T
può includere anche altre colonne, ma non è possibile farvi riferimento nella funzione StateState
perché non sono dichiarate.
let StateState=(T: (State: string)) { T | extend s_s=strcat(State, State) };
StormEvents
| invoke StateState()
| project State, s_s
Output
State | s_s |
---|---|
SUD ATLANTICO | ATLANTICO SUDATLANTIC SUD |
FLORIDA | FLORIDAKASHIDA |
FLORIDA | FLORIDAKASHIDA |
GEORGIA | GEORGIAGEORGIA |
MISSISSIPPI | MISSISSIPPIMISSISSIPPI |
... | ... |
Argomento tabulare con carattere jolly
Il parametro T
table può avere qualsiasi schema e la funzione CountRecordsInTable
funzione funzionerà.
let CountRecordsInTable=(T: (*)) { T | count };
StormEvents | invoke CountRecordsInTable()
Output
Conteggio |
---|
59.066 |
Commenti e suggerimenti
https://aka.ms/ContentUserFeedback.
Presto disponibile: nel corso del 2024 verranno dismessi i problemi di GitHub come meccanismo di feedback per il contenuto e verranno sostituiti con un nuovo sistema di feedback. Per altre informazioni, vedere:Invia e visualizza il feedback per