Let utasítás

Az let utasítás egy kifejezéssel vagy függvénnyel egyenlő változónév beállítására, illetve nézetek létrehozására szolgál.

let az utasítások a következőkhöz hasznosak:

  • Egy összetett kifejezés több részre bontása, amelyeket egy változó jelöl.
  • A lekérdezés törzsén kívüli állandók definiálása az olvashatóság érdekében.
  • Változó definiálása egyszer és többször egy lekérdezésen belül.

Ha a változó korábban egy másik értéket jelentett, például beágyazott utasításokban, akkor a legbelső let utasítás lesz alkalmazva.

Ha egyetlen lekérdezésben szeretné optimalizálni az let utasítás több használatát, tekintse meg a nevesített kifejezéseket használó lekérdezések optimalizálását ismertető cikket.

Megjegyzés

Az let utasítás a nevet egy számításhoz köti, nem pedig a számítás kiértékelt értékéhez. Ez a viselkedés azt jelenti, hogy több, ugyanarra a névre mutató hivatkozás eltérő értéket adhat vissza, mivel a számítást többször is kiértékelték. Ha nem ez a kívánt viselkedés, használja a toscalar() vagy materialize() függvényt.

Szintaxis: Skaláris vagy táblázatos kifejezések

letNév=Kifejezés

Fontos

Az utasításokat pontosvesszővel kell követni. Nem lehetnek üres sorok a let utasítások, illetve a let utasítások és más lekérdezési utasítások között.

További információ a szintaxis konvenciókról.

Paraméterek

Név Típus Kötelező Leírás
Név string ✔️ A változó neve. A nevet szögletes zárójelekkel feloldhatja. Például: ["Name with spaces"].
Expression string ✔️ Skaláris vagy táblázatos eredményt tartalmazó kifejezés. Egy skaláris eredményt let one=1;tartalmazó kifejezés például a , a táblázatos eredményű kifejezés pedig let RecentLog = Logs | where Timestamp > ago(1h).

Szintaxis: Nézet vagy függvény

letNév= [view] ([ Paraméterek ]){FunctionBody}

Fontos

Az utasításokat pontosvesszővel kell követni. Nem lehetnek üres sorok a let utasítások, illetve a let utasítások és más lekérdezési utasítások között.

További információ a szintaxis konvenciókról.

Paraméterek

Név Típus Kötelező Leírás
FunctionBody string ✔️ Felhasználó által definiált függvényt eredményező kifejezés.
view string Csak paraméter nélküli let utasítás esetén releváns. Használat esetén a utasítás szerepel a let táblák/nézetek helyettesítő karakteres kijelölésével rendelkező operátorral rendelkező union lekérdezésekben. Példa: Nézet vagy virtuális tábla létrehozása.
Paraméterek string Nulla vagy több vesszővel tagolt táblázatos vagy skaláris függvényparaméter.

Minden táblázatos típusú paraméter esetében a paraméternek TableName:TableSchema formátumban kell lennie, amelyben a TableSchema oszlopainak vesszővel tagolt listája ColumnName:ColumnType vagy helyettesítő karakter (*). Ha oszlopok vannak megadva, akkor a bemeneti táblázatos argumentumnak tartalmaznia kell ezeket az oszlopokat. Ha helyettesítő karakter van megadva, akkor a bemeneti táblázatos argumentum bármilyen sémával rendelkezhet. A függvény törzsében lévő oszlopokra való hivatkozáshoz meg kell adni őket. Példákért lásd: Táblázatos argumentum séma ésTáblázatos argumentum helyettesítő karakterrel.

Minden skaláris típusú paraméterhez adja meg a paraméter nevét és a paraméter típusát a Név:típusa formátumban. A név megjelenhet a FunctionBodyban , és egy adott értékhez van kötve a felhasználó által definiált függvény meghívásakor. Az egyetlen támogatott típus a bool, string, long, datetime, timespan, real, dynamicés az ilyen típusok aliasai.

Megjegyzés

  • A táblázatos paramétereknek a skaláris paraméterek előtt kell megjelennie.
  • A két utasítást pontosvesszővel kell elválasztani.

Példák

Skaláris értékek definiálása

Az alábbi példa egy skaláris kifejezésutasítást használ.

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

Az alábbi példa a nevet some number a ['name'] jelöléssel köti össze, majd egy táblázatos kifejezésutasításban használja.

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

Felhasználó által definiált függvény létrehozása skaláris számítással

Ez a példa a let utasítást használja argumentumokkal a skaláris számításhoz. A lekérdezés függvényt MultiplyByN határoz meg két szám szorzásához.

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

Kimenet

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

Felhasználó által definiált függvény létrehozása, amely levágja a bemenetet

Az alábbi példa eltávolítja a kezdő és záró elemeket a bemenetből.

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

Kimenet

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

Több let utasítás használata

Ez a példa két let utasítást definiál, amelyekben az egyik utasítás (foo2) egy másikat (foo1) használ.

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

Kimenet

result
50

Nézet vagy virtuális tábla létrehozása

Ez a példa bemutatja, hogyan hozhat létre view egy vagy virtuális táblát let utasítással.

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

Kimenet

$table MyColumn
Tartomány10 5
Tartomány20 5

Materialize függvény használata

A materialize() függvény lehetővé teszi a lekérdezések eredményeinek gyorsítótárazását a lekérdezés végrehajtása során. A függvény használatakor a materialize() rendszer gyorsítótárazza az adatokat, és az eredmény minden későbbi meghívása gyorsítótárazott adatokat használ.

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

Kimenet

1. nap 2. nap Százalék
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

Beágyazott let utasítások használata

A beágyazott let utasítások engedélyezettek, beleértve a felhasználó által definiált függvénykifejezéseket is. Hagyja, hogy az utasítások és az argumentumok a függvény törzsének aktuális és belső hatókörére is vonatkozzanak.

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

Táblázatos argumentum sémával

Az alábbi példa azt határozza meg, hogy a táblaparaméternek T egy típusú stringoszloppal State kell rendelkeznie. A tábla T más oszlopokat is tartalmazhat, de nem hivatkozhatók rájuk a függvényben StateState , mert a nincs deklarálva.

let StateState=(T: (State: string)) { T | extend s_s=strcat(State, State) };
StormEvents
| invoke StateState()
| project State, s_s

Kimenet

Állapot s_s
ATLANTI-ÓCEÁN DÉLI RÉGIÓJA ATLANTI-ÓCEÁN DÉL-ATLANTI DÉLI RÉGIÓJA
FLORIDA FLORIDAFLORIDA
FLORIDA FLORIDAFLORIDA
GRÚZIA GEORGIAGEORGIA
MISSISSIPPI MISSISSIPPIMISSISSIPPI
... ...

Táblázatos argumentum helyettesítő karakterrel

A táblaparaméter T bármilyen sémával rendelkezhet, és a függvény CountRecordsInTable működni fog.

let CountRecordsInTable=(T: (*)) { T | count };
StormEvents | invoke CountRecordsInTable()

Kimenet

Darabszám
59,066