Megosztás a következőn keresztül:


Let utasítás

A következőkre vonatkozik: ✅Microsoft FabricAzure Data ExplorerAzure MonitorMicrosoft Sentinel

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

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

  • Ö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, például beágyazott utasításokban jelent meg, a legbelső let utasítás érvényes.

A let utasítás több használatának optimalizálásáról az Elnevezett kifejezéseket használó lekérdezések optimalizálásacímű témakörben olvashat.

Jegyzet

A 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 is visszaadhat különböző értékeket, mivel a számítást többször is kiértékelik. Ha nem ez a kívánt viselkedés, használjon toscalar() vagy materialize().

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

let Név=Kifejezés

Fontos

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

További információ szintaxiskonvenciákról.

Paraméterek

Név Típus Szükséges Leírás
név string ✔️ A változó neve. A név elől szögletes zárójelekkel is el lehet menekülni. Például ["Name with spaces"].
Kifejezés string ✔️ Skaláris vagy táblázatos eredményt tartalmazó kifejezés. Egy skaláris eredményt tartalmazó kifejezés például let one=1;, a táblázatos eredményt tartalmazó kifejezés pedig let RecentLog = Logs | where Timestamp > ago(1h).

Szintaxis: Nézet vagy függvény

let Name= [view] ([ Parameters ]){FunctionBody}

Fontos

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

További információ szintaxiskonvenciákról.

Paraméterek

Név Típus Szükséges 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ében releváns. Használat esetén a let utasítást egy union operátorral rendelkező lekérdezések tartalmazzák, és helyettesítő karaktereket választanak ki a táblákból/nézetekből. 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éternél a paraméternek TableName:TableSchemaformátumban kell lennie, amelyben TableSchema vagy vesszővel tagolt oszloplista ColumnName:ColumnType vagy helyettesítő karakter (*) formátumban. Ha oszlopok vannak megadva, akkor a bemeneti táblázatos argumentumnak tartalmaznia kell ezeket az oszlopokat. Ha helyettesítő karakter van megadva, 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: Táblázatos argumentum séma és Táblázatos argumentum helyettesítő karakterekkel.

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

Jegyzet

  • 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

Az ebben a szakaszban szereplő példák bemutatják, hogyan használhatja a szintaxist az első lépésekhez.

A cikkben szereplő példák a nyilvánosan elérhető tábláit használják a fürt, például a StormEvents adatbázis tábláját.

A cikkben szereplő példák nyilvánosan elérhető táblákat használnak, például a Weather Analytics StormEvents táblát, mintaadatokat.

A lekérdezési példák az operátor, utasítás vagy függvény szintaxisát és példahasználatát mutatják be.

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

Az alábbi példa skaláris kifejezési utasí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 some number jelöléssel köti össze a nevet ['name'], majd egy táblázatos kifejezési utasításban használja.

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

kimeneti

y
0
5
10
15
20

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 két szám szorzásához MultiplyByN függvényt definiál.

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

kimeneti

x eredmény
1 5
2 10
3 15
4 20
5 25

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

Az alábbi példa eltávolítja a bevezető és a 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))

kimeneti

x eredmény
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 határoz meg, 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

kimeneti

eredmény
50

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

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

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

kimeneti

$table MyColumn
Tartomány10 5
Tartomány20 5

Materialize függvény használata

A materialize() függvény lehetővé teszi az alkérések eredményeinek gyorsítótárazását a lekérdezés végrehajtása során. A materialize() függvény használatakor az adatok gyorsítótárazva lesznek, és az eredmény 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

kimeneti

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éma használatával

Az alábbi példa azt határozza meg, hogy a T táblaparaméternek State típusú oszlopnak stringkell lennie. A T tábla más oszlopokat is tartalmazhat, de a függvény nem hivatkozhat rájuk StateState, mert nincsenek deklarálva.

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

kimeneti

Állam 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 táblaparaméter bármilyen sémával rendelkezhet, és a CountRecordsInTable függvény működni fog.

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

kimeneti

Gróf
59,066