Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Переключайте службы с помощью раскрывающегося списка Версия. Дополнительные сведения о навигации.
Область применения: ✅ 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 |