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

letJmé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

letJmé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, dynamica 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