Let-instructie
Van toepassing op: ✅Microsoft Fabric✅Azure Data Explorer✅Azure Monitor✅Microsoft Sentinel-
Een let
-instructie wordt gebruikt om een variabelenaam in te stellen die gelijk is aan een expressie of functie, of om weergaven te maken.
let
instructies zijn handig voor:
- Het opsplitsen van een complexe expressie in meerdere delen, elk vertegenwoordigd door een variabele.
- Constanten buiten de hoofdtekst van de query definiëren voor leesbaarheid.
- Een variabele eenmaal definiëren en meerdere keren gebruiken binnen een query.
Als de variabele eerder een andere waarde weergeeft, bijvoorbeeld in geneste instructies, is de binnenste let
instructie van toepassing.
Zie Query's optimaliseren die gebruikmaken van benoemde expressiesom meerdere toepassingen van de let
-instructie binnen één query te optimaliseren.
Notitie
De instructie let
verbindt een naam aan een berekening, niet aan de geëvalueerde waarde van die berekening. Dit gedrag betekent dat meerdere verwijzingen naar dezelfde naam verschillende waarden kunnen retourneren omdat de berekening meerdere keren wordt geëvalueerd. Als dit niet het gewenste gedrag is, gebruikt u toscalar() of materialize().
Syntaxis: Scalaire of tabellaire expressies
let
=
Expressie
Belangrijk
Let-instructies moeten worden gevolgd door een puntkomma. Er kunnen geen lege regels zijn tussen let-instructies of tussen let-instructies en andere query-instructies.
Meer informatie over syntaxisconventies.
Parameters
Naam | Type | Vereist | Beschrijving |
---|---|---|---|
naam | string |
✔️ | De naam van de variabele. U kunt de naam met vierkante haken ontsnappen. Bijvoorbeeld ["Name with spaces"] . |
Expressie- | string |
✔️ | Een expressie met een scalair of tabellair resultaat. Een expressie met een scalair resultaat zou bijvoorbeeld let one=1; zijn en een expressie met een tabellair resultaat zou let RecentLog = Logs | where Timestamp > ago(1h) zijn. |
Syntaxis: Weergave of functie
let
Name=
[view
] (
[ Parameters ])
{
FunctionBody}
Belangrijk
Let-instructies moeten worden gevolgd door een puntkomma. Er kunnen geen lege regels zijn tussen let-instructies of tussen let-instructies en andere query-instructies.
Meer informatie over syntaxisconventies.
Parameters
Naam | Type | Vereist | Beschrijving |
---|---|---|---|
FunctionBody- | string |
✔️ | Een expressie die een door de gebruiker gedefinieerde functie oplevert. |
view |
string |
Alleen relevant voor een parameterloze let instructie. Wanneer deze wordt gebruikt, wordt de instructie let opgenomen in query's met een union operator met jokertekens van de tabellen/weergaven. Zie bijvoorbeeld Een weergave of virtuele tabel maken. |
|
parameters | string |
Nul of meer door komma's gescheiden parameters voor tabellaire of scalaire functies. Voor elke parameter van tabellair type moet de parameter de indeling hebben TableName : TableSchema, waarin TableSchema een door komma's gescheiden lijst met kolommen is in de indeling ColumnName: ColumnType of een jokerteken (* ). Als er kolommen zijn opgegeven, moet het argument in tabelvorm van invoer deze kolommen bevatten. Als er een jokerteken is opgegeven, kan het argument tabellaire invoer elk schema hebben. Als u wilt verwijzen naar kolommen in de hoofdtekst van de functie, moeten ze worden opgegeven. Zie argument Tabellaire tabel met schema- en argument tabellaire tabel met jokertekens.Geef voor elke parameter van het scalaire type de parameternaam en het parametertype op in de notatie Name : Type. De naam kan worden weergegeven in de FunctionBody- en is gebonden aan een bepaalde waarde wanneer de door de gebruiker gedefinieerde functie wordt aangeroepen. De enige ondersteunde typen zijn bool , string , long , datetime , timespan , real , dynamic en de aliassen voor deze typen. |
Notitie
- Tabellaire parameters moeten worden weergegeven vóór scalaire parameters.
- Twee instructies moeten worden gescheiden door een puntkomma.
Voorbeelden
In het helpclusteris er een Samples
database met een StormEvents
tabel.
Scalaire waarden definiëren
In het volgende voorbeeld wordt een scalaire expressie-instructie gebruikt.
let n = 10; // number
let place = "Dallas"; // string
let cutoff = ago(62d); // datetime
Events
| where timestamp > cutoff
and city == place
| take n
In het volgende voorbeeld wordt de naam some number
gekoppeld met behulp van de notatie ['name']
en wordt deze vervolgens gebruikt in een expressie-instructie in tabelvorm.
let ['some number'] = 20;
range y from 0 to ['some number'] step 5
uitvoer
y |
---|
0 |
5 |
10 |
15 |
20 |
Een door de gebruiker gedefinieerde functie maken met scalaire berekening
In dit voorbeeld wordt de let-instructie gebruikt met argumenten voor scalaire berekeningen. De query definieert functie-MultiplyByN
voor het vermenigvuldigen van twee getallen.
let MultiplyByN = (val:long, n:long) { val * n };
range x from 1 to 5 step 1
| extend result = MultiplyByN(x, 5)
uitvoer
x | resultaat |
---|---|
1 | 5 |
2 | 10 |
3 | 15 |
4 | 20 |
5 | 25 |
Een door de gebruiker gedefinieerde functie maken waarmee invoer wordt geknipt
In het volgende voorbeeld worden voorloop- en volgvolgende items uit de invoer verwijderd.
let TrimOnes = (s:string) { trim("1", s) };
range x from 10 to 15 step 1
| extend result = TrimOnes(tostring(x))
uitvoer
x | resultaat |
---|---|
10 | 0 |
11 | |
12 | 2 |
13 | 3 |
14 | 4 |
15 | 5 |
Meerdere let-instructies gebruiken
In dit voorbeeld worden twee let-instructies gedefinieerd waarbij één instructie (foo2
) een andere instructie (foo1
) gebruikt.
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
uitvoer
resultaat |
---|
50 |
Een weergave of virtuele tabel maken
In dit voorbeeld ziet u hoe u een let-instructie gebruikt om een view
of virtuele tabel te maken.
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
uitvoer
$table | MyColumn |
---|---|
Bereik10 | 5 |
Bereik20 | 5 |
Een materialize-functie gebruiken
Met de functie materialize()
kunt u subqueryresultaten opslaan tijdens het uitvoeren van query's. Wanneer u de functie materialize()
gebruikt, worden de gegevens in de cache opgeslagen en worden bij elke volgende aanroep van het resultaat gegevens in de cache gebruikt.
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
uitvoer
Dag1 | Dag2 | Percentage |
---|---|---|
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 |
Geneste let-instructies gebruiken
Geneste let-instructies zijn toegestaan, inclusief binnen een door de gebruiker gedefinieerde functie-expressie. Laat instructies en argumenten toepassen in zowel het huidige als het binnenste bereik van de hoofdtekst van de functie.
let start_time = ago(5h);
let end_time = start_time + 2h;
T | where Time > start_time and Time < end_time | ...
Argument in tabelvorm met schema
In het volgende voorbeeld wordt aangegeven dat de tabelparameter T
een kolom moet hebben State
van het type string
. De tabel T
kan ook andere kolommen bevatten, maar er kan niet naar worden verwezen in de functie StateState
omdat deze niet zijn gedeclareerd.
let StateState=(T: (State: string)) { T | extend s_s=strcat(State, State) };
StormEvents
| invoke StateState()
| project State, s_s
uitvoer
Staat | s_s |
---|---|
ATLANTISCHE ZUID | ATLANTISCHE ZUIDATLANTISCHE ZUID |
FLORIDA | FLORIDA SPAINIDA |
FLORIDA | FLORIDA SPAINIDA |
GEORGIË | GEORGIAGEORGIA |
MISSISSIPPI | MISSISSIPPIMISSISSIPPI |
... | ... |
Argument in tabelvorm met jokerteken
De tabelparameter T
elk schema kan hebben en de functie CountRecordsInTable
werkt.
let CountRecordsInTable=(T: (*)) { T | count };
StormEvents | invoke CountRecordsInTable()
uitvoer
Tellen |
---|
59,066 |