Поделиться через


Инструкция let

Переключайте службы с помощью раскрывающегося списка Версия. Дополнительные сведения о навигации.
Область применения: ✅ Microsoft Fabric ✅ Azure Data Explorer ✅ Azure Monitor ✅ Microsoft Sentinel

Оператор let используется для задания имени переменной, равного выражению или функции, или для создания представлений.

let операторы полезны для:

  • Разбиение сложного выражения на несколько частей, каждая из которых представлена переменной.
  • Определение констант за пределами текста запроса для удобства чтения.
  • Определение переменной один раз и его использование несколько раз в запросе.

Если переменная ранее представляла другое значение, например в вложенных инструкциях, применяется самая let внутренняя инструкция.

Чтобы оптимизировать несколько вариантов использования инструкции let в одном запросе, см. статью "Оптимизация запросов", использующих именованные выражения.

Note

Оператор let привязывает имя к вычислению, а не к вычисляемой стоимости этого вычисления. Это означает, что несколько ссылок на одно и то же имя могут возвращать разные значения из-за вычисления, вычисляемого несколько раз. Если это не нужное поведение, используйте toscalar() или materialize().

Синтаксис: скалярные или табличные выражения

let Имя=Выражение

Important

Пусть операторы должны следовать за точкой с запятой. Между операторами let или между операторами let и другими операторами запроса не может быть пустых строк.

Дополнительные сведения о соглашениях синтаксиса.

Parameters

Name Type Required Description
Name string ✔️ Имя переменной. Имя можно экранировать с скобками. Например, ["Name with spaces"].
Expression string ✔️ Выражение со скалярным или табличным результатом. Например, выражение со скалярным результатом будет let one=1;, а выражение с табличным результатом будет let RecentLog = Logs | where Timestamp > ago(1h).

Синтаксис: представление или функция

let Имя= [] view[(Параметры ]){FunctionBody}

Important

Пусть операторы должны следовать за точкой с запятой. Между операторами let или между операторами let и другими операторами запроса не может быть пустых строк.

Дополнительные сведения о соглашениях синтаксиса.

Parameters

Name Type Required Description
FunctionBody string ✔️ Выражение, которое дает определяемую пользователем функцию.
view string Применимо только для инструкции без let параметров. При использовании let инструкция включается в запросы с оператором union с подстановочными знаками для таблиц и представлений. Пример см. в разделе "Создание представления" или "Виртуальная таблица".
Parameters string Ноль или больше параметров табличной или скалярной функции с разделим запятыми.

Для каждого параметра табличного типа параметр должен находиться в формате TableName:TableSchema, в которомTableSchema представляет собой разделенный запятыми список столбцов в формате ColumnName:ColumnType или подстановочный знак (*). Если заданы столбцы, входной табличный аргумент должен содержать эти столбцы. Если указан подстановочный знак, входной табличный аргумент может иметь любую схему. Чтобы ссылаться на столбцы в теле функции, их необходимо указать. Примеры см . в табличном аргументе со схемой и табличным аргументом с подстановочным знаком.

Для каждого параметра скалярного типа укажите имя параметра и тип параметра в формате Name:Type. Имя может отображаться в FunctionBody и привязано к определенному значению при вызове определяемой пользователем функции. Единственными поддерживаемыми типами являются bool, string, , longdatetime, timespanrealdynamic, и псевдонимы для этих типов.

Note

  • Табличные параметры должны отображаться перед скалярными параметрами.
  • Любые два оператора должны быть разделены точкой с запятой.

Examples

В примерах запроса показан синтаксис и пример использования оператора, оператора или функции.

Примеры, приведенные в этой статье, используют общедоступные таблицы в кластере справки, например StormEvents таблицу в базе данных Samples .

В примерах этой статьи используются общедоступные таблицы, такие как Weather таблица в коллекции примеров Weather Analytics. Возможно, потребуется изменить имя таблицы в примере запроса, чтобы она соответствовала таблице в рабочей области.

Определение скалярных значений

В следующем примере используется скалярная инструкция выражения.

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

Определение табличных выражений

В следующем примере имя привязывается some number с помощью ['name'] нотации, а затем используется в инструкции табличного выражения.

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

Output

y
0
5
10
15
20

Создание определяемой пользователем функции с скалярным вычислением

В этом примере используется оператор let с аргументами для скалярного вычисления. Запрос определяет функцию MultiplyByN для умножения двух чисел.

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

Создание определяемой пользователем функции, которая обрезает входные данные

В следующем примере удаляются начальные и конечные из входных данных.

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

Использование множественных операторов let

В этом примере определяются два оператора let, при этом один оператор (foo2) использует другой (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

Создание представления или виртуальной таблицы

В этом примере показано, как использовать инструкцию let для создания или виртуальной view таблицы.

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

Использование функции материализации

Функция materialize() позволяет кэшировать результаты вложенных запросов во время выполнения запроса. При использовании materialize() функции данные кэшируются, а любой последующий вызов результата использует кэшированные данные.

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
МЕЛЬБУРН БИЧ 112 1 11,200
EUSTIS 13,854 12 115,450
ЛОТТС 6,910 1 691,000
SERVICE 997 1 99,700
... ... ... ...

Использование вложенных инструкций let

Вложенные инструкции let разрешены, в том числе в пользовательском выражении функции. Пусть операторы и аргументы применяются как в текущей, так и во внутренней области тела функции.

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

Табличный аргумент со схемой

В следующем примере указывается, что параметр T таблицы должен иметь столбец State типа string. T Таблица также может содержать другие столбцы, но их нельзя ссылаться в функцииStateState, так как они не объявлены.

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

Output

State s_s
ЮЖНАЯ АТЛАНТИКА АТЛАНТИЧЕСКИЙ ЮГATLANTIC SOUTH
FLORIDA FLORIDAFLORIDA
FLORIDA FLORIDAFLORIDA
GEORGIA GEORGIAGEORGIA
MISSISSIPPI MISSISSIPPIMISSISSIPPI
... ...

Табличный аргумент с подстановочным знаком

Параметр T таблицы может иметь любую схему, и функция CountRecordsInTable будет работать.

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

Output

Count
59,066