在使用Azure Log Analytics进行查询时,我一直在查看评估运算符,特别是使用autocluster插件(但我似乎也遇到了与预览和diffpatterns相同的问题)。
如果我有一个查询直接访问资源(包括所有表或只有一个),它可以正常工作。但是,如果我跨多个应用程序或工作区执行相同的查询。我收到一条错误消息:
未声明一个或多个模式引用。检测到的模式引用:支持
app()或workspace()范围函数的使用似乎是问题 - 没有联合来跨多个资源进行查询。
这不起作用:
workspace("vmPROD").Perf
| evaluate autocluster()
这两个都没有:
app("someService").traces
| evaluate autocluster()
这有效:
Perf
| evaluate autocluster()
问题在于我想要跨资源进行评估。起初我认为它可能是范围函数限制,但table() - 也是范围函数,可以工作。
这有效:
table("Perf")
| evaluate autocluster()
我如何解决这个限制?这是一个错误吗?文档中没有提到这种限制。
答案 0 :(得分:0)
在尝试不同的方法来解决这个问题后,我遇到了materialize()函数。此函数允许您缓存子查询的结果,并且在使用app()或workspace()引用资源时,似乎我可以使用机器学习函数来对应缓存的结果。这在加入时也有效 - 这是我想跨资源做的事情。要考虑两个主要限制,最多可以缓存5GB结果,并且必须使用let运算符。
以下是联接的示例:
let joinResult = union app('Konstrukt.SL.CalculationEngine').requests,app('Konstrukt.SL.AggregationEngine').requests;
let cachedJoinResult = materialize(joinResult);
cachedJoinResult
| where success == false
| project session_Id, user_Id, appName,operation_Id,itemCount
| evaluate autocluster();