如何在KQL函数/对象中执行控制命令生成最新存储查询结果
KQL存储查询结果更新+分页解决方案
你的代码无法运行的核心原因是:KQL用户定义函数(UDF)只能包含查询语句,不能执行.drop、.set这类管理控制命令——这类命令属于集群管理操作,不能被封装在函数内部执行。
针对你的需求(确保获取最新数据+支持分页),给出以下几种可行方案:
方案1:自动化批量更新存储查询结果(推荐)
利用Azure Logic Apps、Power Automate或自定义脚本(比如Python调用ADX REST API),定期执行「删除旧结果+创建新结果」的批量命令,确保存储结果始终是最新的。
批量执行的命令示例:
.drop stored_query_result my_stored_qry_res if exists .set stored_query_result my_stored_qry_res <| // 替换成你的实际查询 YourTable | where Timestamp > ago(1d) | summarize count() by Category
用户或API查询时,直接读取存储结果并做分页:
my_stored_qry_res | skip 20 // 跳过前20条(第二页) | take 20 // 取20条数据
方案2:单次提交批量命令更新+查询
如果不需要定期更新,而是每次查询前手动触发更新,可以直接提交「删除+创建」的批量命令(ADX支持用换行或分号分隔多个命令),完成后再查询存储结果。
示例批量命令:
.drop stored_query_result my_stored_qry_res if exists; .set stored_query_result my_stored_qry_res with (previewCount = 20) <| <你的查询语句>;
方案3:动态查询+分页(无存储结果)
如果无法使用自动化或批量命令,可直接定义返回原始查询结果的函数,调用时通过skip和take实现分页。这种方式能保证每次都是最新数据,但性能会受原始查询复杂度影响(无缓存)。
函数定义:
.create-or-alter function get_latest_data() { <你的查询语句> }
分页查询调用:
get_latest_data() | skip 0 // 第一页 | take 20
内容的提问来源于stack exchange,提问作者Brahmaiah Takkellapati
相关产品推荐
相关产品推荐

