Sdílet prostřednictvím


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í komplexního výrazu do několika částí, které jsou reprezentované proměnnou
  • Definování konstant mimo tělo dotazu pro čitelnost
  • Definování proměnné jednou a jeho použití několikrát v dotazu.

Pokud proměnná dříve reprezentovala jinou hodnotu, například v vnořených příkazech, použije se nejvnitřnější let příkaz.

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 vytvoří vazbu názvu na výpočet, nikoli na vyhodnocenou hodnotu daného výpočtu. Toto chování znamená, že více odkazů na stejný název může vrátit různé hodnoty z důvodu výpočtu, který 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é

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í existovat žádné prázdné řádky.

Přečtěte si další informace o konvencích syntaxe.

Parametry

Název Type Požadováno Popis
Jméno string ✔️ Název proměnné. Název můžete utéct závorkami. Například ["Name with spaces"].
Expression string ✔️ Výraz se skalárním nebo tabulkovým výsledkem. Například výraz s 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é

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í existovat žádné prázdné řádky.

Přečtěte si další informace o konvencích syntaxe.

Parametry

Název Type Pož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í se příkaz let zahrne do dotazů s operátorem union s výběrem zástupných znaků tabulek/zobrazení. Příklad najdete v tématu Vytvoření zobrazení nebo virtuální tabulky.
Parametry string Nula nebo více tabulkových nebo skalárních parametrů tabulkových nebo skalárních funkcí oddělených čárkami.

Pro každý parametr tabulkového typu by měl být parametr 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 zadány sloupce, vstupní tabulkový argument musí obsahovat tyto sloupce. Pokud je zadán 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 tabulkovém argumentu se schématem a tabulkovým argumentem se zástupným znakem.

Pro každý parametr skalárního typu zadejte název parametru a typ parametru ve formátu Name:Type. Název se může objevit v funkci FunctionBody a je vázán na určitou hodnotu při vyvolání uživatelem definované funkce. Jedinými podporovanými typy jsou bool, , string, timespanreallongdatetime, , , dynamica aliasy pro tyto typy.

Poznámka:

  • Tabulkové parametry musí být uvedeny před skalárními parametry.
  • Všechny dva příkazy musí být oddělené 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 příkazu výrazu.

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

Vytvoření uživatelem definované funkce pomocí skalárního výpočtu

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

linka 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 odebere úvodní a koncové položky ze vstupu.

let TrimOnes = (s:string) { trim("1", s) };
range x from 10 to 15 step 1 
| extend result = TrimOnes(tostring(x))

Výstup

linka 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 nebo virtuální tabulku.

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 jakékoli následné vyvolání výsledku používá 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 povolené, včetně výrazu uživatelem definované funkce. Příkazy a argumenty let se použijí 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 jiné sloupce, ale na ně nelze ve funkci StateState 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

State s_s
ATLANTICKÝ JIH ATLANTIC SOUTHATLANTIC SOUTH
FLORIDA FLORIDAFLORIDA
FLORIDA FLORIDAFLORIDA
GEORGIA GEORGIAGEORGIA
MISSISSIPPI MISSISSIPPIMISSISSIPPI
... ...

Tabulkový argument se zástupným znakem

Parametr tabulky T může mít jakékoli schéma a funkce CountRecordsInTable bude fungovat.

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

Výstup

Počet
59,066