Let-instructie
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:
- Een complexe expressie opsplitsen in meerdere delen, elk vertegenwoordigd door een variabele.
- Constanten definiëren buiten de hoofdtekst van de query voor leesbaarheid.
- Een variabele eenmaal definiëren en deze meerdere keren gebruiken binnen een query.
Als de variabele eerder een andere waarde vertegenwoordigde, bijvoorbeeld in geneste instructies, is de binnenste let
instructie van toepassing.
Zie Query's optimaliseren die gebruikmaken van benoemde expressies als u meerdere toepassingen van de let
instructie binnen één query wilt optimaliseren.
Notitie
De let
instructie 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 expressies of tabellaire expressies
let
Naam=
Expressie
Belangrijk
Let-instructies moeten worden gevolgd door een puntkomma. Er mogen geen lege regels zijn tussen let-instructies of tussen let-instructies en andere queryinstructies.
Meer informatie over syntaxisconventies.
Parameters
Naam | Type | Vereist | Beschrijving |
---|---|---|---|
Naam | string |
✔️ | De naam van de variabele. U kunt de naam met vierkante haken escapen. Bijvoorbeeld ["Name with spaces"] . |
Expression | string |
✔️ | Een expressie met een scalair of tabellair resultaat. Een expressie met een scalair resultaat is let one=1; bijvoorbeeld , en een expressie met een tabellair resultaat is let RecentLog = Logs | where Timestamp > ago(1h) . |
Syntaxis: weergave of functie
let
Naam=
[view
] (
[ Parameters ])
{
FunctionBody}
Belangrijk
Let-instructies moeten worden gevolgd door een puntkomma. Er mogen geen lege regels zijn tussen let-instructies of tussen let-instructies en andere queryinstructies.
Meer informatie over syntaxisconventies.
Parameters
Naam | Type | Vereist | Beschrijving |
---|---|---|---|
Functiebody | string |
✔️ | Een expressie die een door de gebruiker gedefinieerde functie oplevert. |
view |
string |
Alleen relevant voor een parameterloze let instructie. Bij gebruik wordt de let instructie opgenomen in query's met een union operator met jokertekenselectie van de tabellen/weergaven. Zie Een weergave of virtuele tabel maken voor een voorbeeld. |
|
Parameters | string |
Nul of meer door komma's gescheiden tabel- of scalaire functieparameters. Voor elke parameter van het type tabel moet de parameter de indeling TableName : TableSchema hebben, waarbij 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 voor invoer deze kolommen bevatten. Als er een jokerteken is opgegeven, kan het tabellaire invoerargument elk schema hebben. Als u wilt verwijzen naar kolommen in de hoofdtekst van de functie, moeten deze worden opgegeven. Zie Tabellair argument met schema en Tabelargument met jokerteken voor voorbeelden.Geef voor elke parameter van het scalaire type de parameternaam en het parametertype op in de indeling Naamtype : . De naam kan worden weergegeven in de FunctieBody 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
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
gebonden met behulp van de ['name']
notatie en wordt deze vervolgens gebruikt in een tabellaire expressie-instructie.
let ['some number'] = 20;
range y from 0 to ['some number'] step 5
Een door de gebruiker gedefinieerde functie maken met scalaire berekening
In dit voorbeeld wordt de let-instructie gebruikt met argumenten voor scalaire berekening. De query definieert de 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 | result |
---|---|
1 | 5 |
2 | 10 |
3 | 15 |
4 | 20 |
5 | 25 |
Een door de gebruiker gedefinieerde functie maken waarmee invoer wordt bijgeknipt
In het volgende voorbeeld worden voorloop- en volgtekens 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 | result |
---|---|
10 | 0 |
11 | |
12 | 2 |
13 | 3 |
14 | 4 |
15 | 5 |
Meerdere let-instructies gebruiken
In dit voorbeeld worden twee let-instructies gedefinieerd waarbij de ene instructie (foo2
) een andere (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
result |
---|
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 materialisatiefunctie gebruiken
Met de materialize()
functie kunt u subqueryresultaten in de cache opslaan tijdens het uitvoeren van de query. Wanneer u de materialize()
functie 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, ook binnen een door de gebruiker gedefinieerde functie-expressie. Laat instructies en argumenten van toepassing zijn 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 | ...
Tabellair argument met schema
In het volgende voorbeeld wordt aangegeven dat de tabelparameter T
een kolom State
van het type string
moet hebben. De tabel T
kan ook andere kolommen bevatten, maar er kan niet naar worden verwezen in de functie StateState
omdat de 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 | ATLANTIC SOUTHATLANTIC SOUTH |
FLORIDA | FLORIDAFLORIDA |
FLORIDA | FLORIDAFLORIDA |
GEORGIË | GEORGIAGEORGIA |
MISSISSIPPI | MISSISSIPPIMISSISSIPPI |
... | ... |
Tabellair argument met jokerteken
De tabelparameter T
kan elk schema hebben en de functie CountRecordsInTable
werkt.
let CountRecordsInTable=(T: (*)) { T | count };
StormEvents | invoke CountRecordsInTable()
Uitvoer
Count |
---|
59,066 |
Feedback
https://aka.ms/ContentUserFeedback.
Binnenkort beschikbaar: In de loop van 2024 zullen we GitHub-problemen geleidelijk uitfaseren als het feedbackmechanisme voor inhoud en deze vervangen door een nieuw feedbacksysteem. Zie voor meer informatie:Feedback verzenden en weergeven voor