Кусто: союз промежуточных результатов, полученный путем дорогостоящих расчетов

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

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, что нам нужно заморозить промежуточный результат, и все последующие запросы должны работать с замороженным промежуточным результатом, а не вычислять все из исходного кода?

Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
Как установить LAMP Stack 1/2 на Azure Linux VM
Как установить LAMP Stack 1/2 на Azure Linux VM
В дополнение к нашему предыдущему сообщению о намерении Azure прекратить поддержку Azure Database для MySQL в качестве единого сервера после 16...
0
0
41
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Используйте функцию материализации():

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"
)

Другие вопросы по теме