У меня есть дорогой запрос, который требует много процессора и памяти для получения результата. Однако результирующий набор данных содержит лишь ограниченное количество строк.
let result = expensive_function()
| summarize A=xxx, B=xxx by X, Y, Z;
Я хочу добавить еще одну строку, в которой резюмируется результат. Например, опустите столбец Z
в ключах суммирования и установите Z = "ALL"
для строки результата.
result
| union (
result
| summarize A=XXX, B=XXX by X, Y
| extend Z = "ALL"
)
Когда это выполняется, кажется, что Kusto расширит и выполнит expensive_function()
параллельно в операторе union
, что приведет к удвоению потребления ЦП и памяти.
Я попытался добавить hint.concurrency=1
к оператору union
, это уменьшит пиковую память до уровня одного запроса результата, однако время выполнения будет удвоено.
Можем ли мы намекнуть Kusto, что нам нужно заморозить промежуточный результат, и все последующие запросы должны работать с замороженным промежуточным результатом, а не вычислять все из исходного кода?
Используйте функцию материализации():
let result = materialize(expensive_function()
| summarize A=xxx, B=xxx by X, Y, Z);
result
| union (
result
| summarize A=XXX, B=XXX by X, Y
| extend Z = "ALL"
)