Příkaz let
Platí pro: ✅Microsoft Fabric✅Azure Data Explorer✅Azure Monitor✅Microsoft Sentinel
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
let
Jmé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
let
Jmé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 , timespan real long datetime , , , dynamic a 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 |