Sdílet prostřednictvím


Příkaz 'let'

Přepněte služby pomocí rozevíracího seznamu Verze . Přečtěte si další informace o navigaci.
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.

Note

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

Important

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.

Parameters

Name Typ Required Description
Name 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}

Important

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.

Parameters

Name Typ Required Description
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.
Parameters 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, longdatetimetimespanreal, , , dynamica aliasy pro tyto typy.

Note

  • 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.

Examples

Příklady dotazu ukazují syntaxi a příklad použití operátoru, příkazu nebo funkce.

Příklady v tomto článku používají veřejně dostupné tabulky v clusteru nápovědy, jako je StormEvents tabulka v databázi Ukázky.

Příklady v tomto článku používají veřejně dostupné tabulky, například Weather tabulku v galerii ukázek analýzy počasí. Možná budete muset změnit název tabulky v ukázkovém dotazu tak, aby odpovídal tabulce v pracovním prostoru.

Definování skalárních hodnot

Následující příklad používá příkaz skalárního výrazu.

let threshold = 50;
let region = "West";
datatable(Name:string, Score:int, Region:string)
[
    "Alice", 45, "West",
    "Bob", 60, "East",
    "Charlie", 55, "West",
    "Dana", 70, "North"
]
| where Score > threshold and Region == region

Output

Name Score Region
Charlie 55 West

Definování tabulkových výrazů

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

Output

y
0
5
10
15
20

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)

Output

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 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))

Output

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

Output

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

Output

$table MyColumn
Range10 5
Range20 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 TotalEventsbyLocation = StormEvents
| summarize TotalCount = count() by Location = BeginLocation;
let materializedScope = StormEvents
| summarize by EventType, Location = EndLocation;
let cachedResult = materialize(materializedScope);
cachedResult
| project EventType, Location
| join kind = inner
(
    cachedResult
    | project EventType, Location
)
on EventType
| where Location != ""
| summarize EventCount = count() by Location
| join kind = inner
    TotalEventsbyLocation
on $left.Location == $right.Location
| project Location, EventCount, TotalCount, Percentage = EventCount * 100.0 / TotalCount

Output

Location EventCount TotalCount Percentage
MELBOURNE BEACH 112 1 11,200
EUSTIS 13,854 12 115,450
LOTTY 6,910 1 691,000
SERVICE 997 1 99,700
... ... ... ...

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

Output

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()

Output

Count
59,066