Udostępnij za pośrednictwem


Instrukcja let

Dotyczy: ✅Microsoft Fabric✅Azure Data ExplorerAzure MonitorMicrosoft Sentinel

Instrukcja let służy do ustawiania nazwy zmiennej równej wyrażeniu lub funkcji albo do tworzenia widoków.

let instrukcje są przydatne w następujących celach:

  • Podzielenie złożonego wyrażenia na wiele części, z których każda jest reprezentowana przez zmienną.
  • Definiowanie stałych poza treścią zapytania w celu zapewnienia czytelności.
  • Definiowanie zmiennej raz i używanie jej wiele razy w zapytaniu.

Jeśli zmienna wcześniej reprezentowała inną wartość, na przykład w instrukcjach zagnieżdżonych, stosuje się najbardziej let wewnętrzną instrukcję.

Aby zoptymalizować wiele zastosowań instrukcji let w ramach jednego zapytania, zobacz Optymalizowanie zapytań używających nazwanych wyrażeń.

Uwaga

Instrukcja let wiąże nazwę z obliczeniami, a nie z obliczoną wartością tego obliczenia. To zachowanie oznacza, że wiele odwołań do tej samej nazwy może zwracać różne wartości ze względu na wielokrotne obliczanie obliczeń. Jeśli nie jest to pożądane zachowanie, użyj metody toscalar() lub zmaterializuj().

Składnia: wyrażenia skalarne lub tabelaryczne

letNazwa = Wyrażenie

Ważne

Instrukcje Let muszą być zgodne ze średnikiem. Nie może istnieć puste wiersze między instrukcjami let lub między instrukcjami let i innymi instrukcjami zapytania.

Dowiedz się więcej na temat konwencji składni.

Parametry

Nazwisko Type Wymagania opis
Nazwa/nazwisko string ✔️ Nazwa zmiennej. Możesz uciec od nazwy za pomocą nawiasów kwadratowych. Na przykład ["Name with spaces"].
Expression string ✔️ Wyrażenie z wynikiem skalarnym lub tabelarycznym. Na przykład wyrażenie z wynikiem skalarnym będzie let one=1;miało wartość , a wyrażenie z wynikiem tabelarycznym to let RecentLog = Logs | where Timestamp > ago(1h).

Składnia: Wyświetlanie lub funkcja

letNazwa = [] ([ viewParametry ]) { FunctionBody }

Ważne

Instrukcje Let muszą być zgodne ze średnikiem. Nie może istnieć puste wiersze między instrukcjami let lub między instrukcjami let i innymi instrukcjami zapytania.

Dowiedz się więcej na temat konwencji składni.

Parametry

Nazwisko Type Wymagania opis
FunkcjaBody string ✔️ Wyrażenie, które daje funkcję zdefiniowaną przez użytkownika.
view string Dotyczy tylko instrukcji bez let parametrów. W przypadku użycia instrukcja let jest uwzględniana w zapytaniach z operatorem z wyborem union symboli wieloznacznych tabel/widoków. Aby zapoznać się z przykładem, zobacz Tworzenie widoku lub tabeli wirtualnej.
Parametry string Zero lub więcej parametrów funkcji rozdzielonych przecinkami tabelarycznych lub skalarnych.

Dla każdego parametru typu tabelarycznego parametr powinien być w formacie TableName TableSchema, w którym TableSchema jest rozdzielona przecinkami lista kolumn w formacie ColumnName::ColumnType lub symbol wieloznaczny ().* Jeśli określono kolumny, argument tabelaryczny danych wejściowych musi zawierać te kolumny. Jeśli zostanie określony symbol wieloznaczny, argument tabelaryczny danych wejściowych może mieć dowolny schemat. Aby odwołać się do kolumn w treści funkcji, należy je określić. Przykłady można znaleźć w temacie Tabelaryczny argument ze schematem i argumentem tabelarycznym z symbolami wieloznacznymi.

Dla każdego parametru typu skalarnego podaj nazwę parametru i typ parametru w formacie Typ nazwy:. Nazwa może pojawić się w obiekcie FunctionBody i jest powiązana z określoną wartością po wywołaniu funkcji zdefiniowanej przez użytkownika. Jedynymi obsługiwanymi typami są bool, , timespandatetimerealstringlong, dynamici aliasy dla tych typów.

Uwaga

  • Parametry tabelaryczne muszą pojawić się przed parametrami skalarnym.
  • Wszystkie dwie instrukcje muszą być oddzielone średnikiem.

Przykłady

Definiowanie wartości skalarnych

W poniższym przykładzie użyto instrukcji wyrażenia skalarnego.

let n = 10;  // number
let place = "Dallas";  // string
let cutoff = ago(62d); // datetime 
Events 
| where timestamp > cutoff 
    and city == place 
| take n

Poniższy przykład wiąże nazwę some number przy użyciu ['name'] notacji, a następnie używa jej w instrukcji wyrażenia tabelarycznego.

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

Tworzenie funkcji zdefiniowanej przez użytkownika przy użyciu obliczeń skalarnych

W tym przykładzie użyto instrukcji let z argumentami dla obliczeń skalarnych. Zapytanie definiuje funkcję MultiplyByN mnożenia dwóch liczb.

let MultiplyByN = (val:long, n:long) { val * n };
range x from 1 to 5 step 1 
| extend result = MultiplyByN(x, 5)

Wyjście

x result
1 5
2 10
3 15
100 20
5 25

Tworzenie funkcji zdefiniowanej przez użytkownika, która przycina dane wejściowe

Poniższy przykład usuwa wiodące i końcowe z danych wejściowych.

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

Wyjście

x result
10 0
11
12 2
13 3
14 100
15 5

Używanie wielu instrukcji let

W tym przykładzie zdefiniowano dwie instrukcje let, w których jedna instrukcja (foo2) używa innej (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

Wyjście

result
50

Tworzenie widoku lub tabeli wirtualnej

W tym przykładzie pokazano, jak utworzyć tabelę wirtualną view lub za pomocą instrukcji let.

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

Wyjście

$table MyColumn
Zakres10 5
Zakres 20 5

Używanie funkcji materializowania

Funkcja materialize() umożliwia buforowanie wyników podzapytania w czasie wykonywania zapytania. Gdy używasz materialize() funkcji, dane są buforowane, a każde kolejne wywołanie wyniku używa buforowanych danych.

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

Wyjście

Dzień1 Dzień2 Procent
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

Używanie zagnieżdżonych instrukcji let

Zagnieżdżone instrukcje let są dozwolone, w tym w wyrażeniu funkcji zdefiniowanej przez użytkownika. Instrukcje i argumenty let mają zastosowanie zarówno w bieżącym, jak i wewnętrznym zakresie treści funkcji.

let start_time = ago(5h); 
let end_time = start_time + 2h; 
T | where Time > start_time and Time < end_time | ...

Tabelaryczny argument ze schematem

W poniższym przykładzie określono, że parametr T tabeli musi mieć kolumnę State typu string. Tabela T może również zawierać inne kolumny, ale nie można odwoływać się do nich w funkcji StateState , ponieważ nie są zadeklarowane.

let StateState=(T: (State: string)) { T | extend s_s=strcat(State, State) };
StormEvents
| invoke StateState()
| project State, s_s

Wyjście

Stan s_s
POŁUDNIE ATLANTYCKIE POŁUDNIOWOALANTYCZNY POŁUDNIOWY ATLANTYK
FLORIDA FLORIDAFLORIDA
FLORIDA FLORIDAFLORIDA
GEORGIA GEORGIAGEORGIA
MISSISSIPPI MISSISSIPPISSISSIPPI
... ...

Argument tabelaryczny z symbolem wieloznacznym

Parametr T tabeli może mieć dowolny schemat, a funkcja CountRecordsInTable będzie działać.

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

Wyjście

Count
59,066