Я оптимизирую некоторый код Kusto, в котором доступ к базовым таблицам заключен в определенные пользователем функции, иногда в несколько уровней вызовов функций. Например, предположим, что у вас есть табличная функция GetStuff (), которая, в свою очередь, вызывает табличную функцию GetStuff2 (), которая вызывает базовую таблицу Kusto Stuff.
У меня вопрос: если я напишу запрос Kusto, который включает в себя объединение с табличной функцией GetStuff (), будет ли оптимизатор Azure Data Explorer работать для оптимизации всего стека вызовов? Другими словами, будет ли он вести себя как представления в реляционной базе данных, где он будет создавать и оптимизировать план запроса для всего запроса, сначала разбивая определение представления, или оптимизация будет действовать только на определении функции или уровне запроса?
.create-or-alter function with (folder = "Stuff", docstring = "Stuff", skipvalidation = "true") GetStuff() {
ABaseTable
| join GetStuff2()
| more logic
…
}
.create-or-alter function with (folder = "Stuff", docstring = "More Stuff", skipvalidation = "true") GetStuff2() {
AnotherBaseTable
| join GetStuff
| more logic
…
}
Вот запрос:
GetStuff()
| join YetAnotherBaseTable
….
Этот тип запроса не оптимизирован.