Příkaz let
Příkaz let
slouží k nastavení názvu proměnné, který se rovná výrazu nebo funkci, nebo k vytvoření zobrazení.
let
příkazy jsou užitečné pro:
- Rozdělení složitého výrazu do více částí, z nichž každá je reprezentovaná proměnnou.
- Definování konstant mimo text dotazu pro čitelnost.
- Definování proměnné jednou a vícenásobné použití v rámci dotazu.
Pokud proměnná dříve představovala jinou hodnotu, například ve vnořených příkazech, použije se příkaz nejvnitřnější let
.
Pokud chcete optimalizovat více použití let
příkazu v rámci jednoho dotazu, přečtěte si téma Optimalizace dotazů, které používají pojmenované výrazy.
Poznámka
Příkaz let
váže název na výpočet, nikoli na vyhodnocenou hodnotu tohoto výpočtu. Toto chování znamená, že více odkazů na stejný název může vrátit různé hodnoty, protože výpočet se vyhodnocuje vícekrát. Pokud se nejedná o požadované chování, použijte toscalar() nebo materialize().
Syntaxe: Skalární nebo tabulkové výrazy
let
Jméno=
Výraz
Důležité
Za příkazy Let musí následovat středník. Mezi příkazy let nebo mezi příkazy let a jinými příkazy dotazu nesmí být žádné prázdné řádky.
Přečtěte si další informace o konvencích syntaxe.
Parametry
Název | Typ | Vyžadováno | Popis |
---|---|---|---|
Název | string |
✔️ | Název proměnné. Název můžete utéct do závorek. Například, ["Name with spaces"] . |
Výraz | string |
✔️ | Výraz se skalárním nebo tabulkovým výsledkem. Například výraz se skalárním výsledkem by byl let one=1; a výraz s tabulkovým výsledkem by byl let RecentLog = Logs | where Timestamp > ago(1h) . |
Syntaxe: Zobrazení nebo funkce
let
Jméno=
[view
] (
[ Parametry ])
{
FunctionBody}
Důležité
Za příkazy Let musí následovat středník. Mezi příkazy let nebo mezi příkazy let a jinými příkazy dotazu nesmí být žádné prázdné řádky.
Přečtěte si další informace o konvencích syntaxe.
Parametry
Název | Typ | Vyžadováno | Popis |
---|---|---|---|
FunctionBody | string |
✔️ | Výraz, který poskytuje uživatelem definovanou funkci. |
view |
string |
Relevantní pouze pro příkaz bez let parametru. Při použití let se příkaz zahrne do dotazů s operátorem union se zástupným znakem pro výběr tabulek/zobrazení. Příklad najdete v tématu Vytvoření zobrazení nebo virtuální tabulky. |
|
Parametry | string |
Žádný nebo více parametrů tabulkových nebo skalárních funkcí oddělených čárkami Pro každý parametr tabulkového typu by parametr měl být ve formátu TableName : TableSchema, ve kterém TableSchema je seznam sloupců oddělený čárkami ve formátu ColumnName: ColumnType nebo zástupný znak (* ). Pokud jsou sloupce zadané, musí vstupní tabulkový argument tyto sloupce obsahovat. Pokud je zadaný zástupný znak, může vstupní tabulkový argument obsahovat jakékoli schéma. Pokud chcete odkazovat na sloupce v těle funkce, musí být zadány. Příklady najdete v tématu Tabulkový argument se schématem a Tabulkový argument se zástupným znakem.Pro každý parametr skalárního typu zadejte název parametru a typ parametru ve formátu Typ názvu : . Název se může zobrazit v objektu FunctionBody a je vázán na konkrétní hodnotu při vyvolání uživatelem definované funkce. Jedinými podporovanými typy jsou bool , string , long , datetime , timespan , real , dynamic a aliasy pro tyto typy. |
Poznámka
- Před skalárními parametry se musí zobrazit tabulkové parametry.
- Jakékoli dva příkazy musí být odděleny středníkem.
Příklady
Definování skalárních hodnot
Následující příklad používá příkaz skalárního výrazu.
let n = 10; // number
let place = "Dallas"; // string
let cutoff = ago(62d); // datetime
Events
| where timestamp > cutoff
and city == place
| take n
Následující příklad vytvoří vazbu názvu some number
pomocí zápisu ['name']
a pak ho použije v tabulkovém výrazu příkaz.
let ['some number'] = 20;
range y from 0 to ['some number'] step 5
Vytvoření uživatelem definované funkce se skalárním výpočtem
Tento příklad používá příkaz let s argumenty pro skalární výpočet. Dotaz definuje funkci MultiplyByN
pro násobení dvou čísel.
let MultiplyByN = (val:long, n:long) { val * n };
range x from 1 to 5 step 1
| extend result = MultiplyByN(x, 5)
Výstup
x | result |
---|---|
1 | 5 |
2 | 10 |
3 | 15 |
4 | 20 |
5 | 25 |
Vytvoření uživatelem definované funkce, která oříznou vstup
Následující příklad ze vstupu odebere úvodní a koncové jedničky.
let TrimOnes = (s:string) { trim("1", s) };
range x from 10 to 15 step 1
| extend result = TrimOnes(tostring(x))
Výstup
x | result |
---|---|
10 | 0 |
11 | |
12 | 2 |
13 | 3 |
14 | 4 |
15 | 5 |
Použití více příkazů let
Tento příklad definuje dva příkazy let, kde jeden příkaz (foo2
) používá jiný (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
Výstup
result |
---|
50 |
Vytvoření zobrazení nebo virtuální tabulky
Tento příklad ukazuje, jak pomocí příkazu let vytvořit view
virtuální tabulku nebo.
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
Výstup
$table | MyColumn |
---|---|
Rozsah 10 | 5 |
Rozsah 20 | 5 |
Použití materializace funkce
Funkce materialize()
umožňuje ukládat výsledky poddotazů do mezipaměti během provádění dotazu. Při použití materialize()
funkce se data ukládají do mezipaměti a při každém následném vyvolání výsledku se používají data uložená v mezipaměti.
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
Výstup
Den 1 | Den 2 | Procento |
---|---|---|
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 |
Použití vnořených příkazů let
Vnořené příkazy let jsou povoleny, a to i v rámci uživatelem definovaného výrazu funkce. Nechejte příkazy a argumenty použít v aktuálním i vnitřním rozsahu těla funkce.
let start_time = ago(5h);
let end_time = start_time + 2h;
T | where Time > start_time and Time < end_time | ...
Tabulkový argument se schématem
Následující příklad určuje, že parametr T
tabulky musí mít sloupec State
typu string
. Tabulka T
může obsahovat i další sloupce, ale ve funkci StateState
na ně nelze odkazovat, protože nejsou deklarovány.
let StateState=(T: (State: string)) { T | extend s_s=strcat(State, State) };
StormEvents
| invoke StateState()
| project State, s_s
Výstup
Stav | s_s |
---|---|
ATLANTICKÝ JIH | ATLANTICKÝ JIHATLANTICKÝ JIH |
FLORIDA | FLORIDAFLORIDA |
FLORIDA | FLORIDAFLORIDA |
GRUZIE | GEORGIAGEORGIA |
MISSISSIPPI | MISSISSIPPIMISSISSIPPI |
... | ... |
Tabulkový argument se zástupným znakem
Parametr T
table může mít libovolné schéma a funkce CountRecordsInTable
bude fungovat.
let CountRecordsInTable=(T: (*)) { T | count };
StormEvents | invoke CountRecordsInTable()
Výstup
Počet |
---|
59,066 |
Váš názor
https://aka.ms/ContentUserFeedback.
Připravujeme: V průběhu roku 2024 budeme postupně vyřazovat problémy z GitHub coby mechanismus zpětné vazby pro obsah a nahrazovat ho novým systémem zpětné vazby. Další informace naleznete v tématu:Odeslat a zobrazit názory pro