Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Переключайте службы с помощью раскрывающегося списка Версия. Дополнительные сведения о навигации.
Область применения: ✅ Microsoft Fabric ✅ Azure Data Explorer ✅ Azure Monitor ✅ Microsoft Sentinel
В этой статье описывается, как оптимизировать использование именованных выражений в запросе.
В языке запросов Kusto можно привязать имена к сложным выражениям несколькими разными способами:
- В инструкции let
- В операторе as
- В списке формальных параметров определяемых пользователем функций
При ссылке на эти именованные выражения в запросе выполняются следующие действия.
- Вычисляется вычисление в именованное выражение. Это вычисление создает скалярное или табличное значение.
- Именованное выражение заменяется вычисляемым значением.
Если одно и то же связанное имя используется несколько раз, базовый расчет будет повторяться несколько раз. Когда это проблема?
- Когда вычисления потребляют много ресурсов и используются много раз.
- Если вычисление не детерминировано, но запрос предполагает, что все вызовы возвращают одно и то же значение.
Смягчение последствий
Чтобы устранить эти проблемы, можно материализовать вычисление в памяти во время запроса. В зависимости от способа определения именованного вычисления вы будете использовать различные стратегии материализации:
Табличные функции
Используйте следующие стратегии для табличных функций:
- операторы и параметры функции: используйте функцию materialize().
-
оператор as: задайте для значения
hint.materializedподсказкиtrueзначение .
Например, следующий запрос использует недетерминированный табличный оператор:
Замечание
Таблицы не отсортированы в целом, поэтому любая ссылка на таблицу в запросе не определена по определению.
Поведение без использования функции материализации
range x from 1 to 100 step 1
| sample 1
| as T
| union T
Выходные данные
| x |
|---|
| 63 |
| 92 |
Поведение с помощью функции материализации
range x from 1 to 100 step 1
| sample 1
| as hint.materialized=true T
| union T
Выходные данные
| x |
|---|
| 95 |
| 95 |
Скалярные функции
Недетерминированные скалярные функции могут быть вынуждены вычислять ровно один раз с помощью toscalar().
Например, следующий запрос использует недетерминированную функцию rand():
let x = () {rand(1000)};
let y = () {toscalar(rand(1000))};
print x, x, y, y
Выходные данные
| print_0 | print_1 | print_2 | print_3 |
|---|---|---|---|
| 166 | 137 | 70 | 70 |